C语言 typedef 简单应用技巧
来源:互联网 发布:免费简约导航php源码 编辑:程序博客网 时间:2024/06/04 17:47
出处:博客 八月初十
先耐心看看代码
#include <stdio.h> typedef /*auto*/ char * pchar; // 指针定义;/*注释的地方,主要是为说明,typedef也是一个存储类型关键字(register, auto, static一样),如果打开注释,会报“错误:声明指定了多个存储类” */typedef /*static*/ int iarray[2]; // int数组定义typedef char carray[2]; // char数组定义typedef char * parray[2]; // 指针数组定义typedef double darray[5][5]; // 二维数组定义typedef int func(void); // 函数定义 typedef struct /*user*/ { //注释的地方可以打开,注释掉就是匿名结构体 char name[32]; int age;} user; typedef int (*pfunc)(user u); // 函数指针定义 //技巧一,使用typedef,简化结构体,易于数组结构使用user userGroup[2] = {{"userName1", 23},{"userName2", 32}}; // 不使用typedef无法使用此种方式初始化数组 //技巧二,使用typedef,简化函数参数,便函数清晰简单int showUser(user u) { // 使用 printf("name:%s, age:%d\n", u.name, u.age); return 0;} // 技巧三,使用typedef,定义函数指针,很多有限状态机会用这个技巧做函数状态跳转pfunc pf = showUser; int main(int argc, char * argv[]) { pchar pc; printf("char * pchar size = %d\n", (int) sizeof pc); // 这里可以不加括号,下面的用法必须加括号 printf("int iarray[2] size = %d\n", (int) sizeof(iarray)); printf("char carray[2] size = %d\n", (int) sizeof(carray)); printf("char * parray[2] size = %d\n", (int) sizeof(carray)); printf("double carray[5][5] size = %d\n", (int) sizeof(darray)); printf("int func size = %d\n", (int) sizeof(func)); printf("struct user size = %d\n", (int) sizeof(user)); printf("int (*pfunc) size = %d\n", (int) sizeof(pfunc)); printf("function size = %d\n", (int) sizeof(showUser)); // 这里只占一个字节,可以思考下。 pf(userGroup[0]); // 这里用typedef简化了Struct当参数 pf(userGroup[1]); return 0;}
1. 通用变量定义
typedef short int_16typedef unsigned short uint_16
int_16 等价于 short
uint_16 等价于 unsigned short
一般用这样的方式,做可移植代码,提高代码的兼容性
2. 数组变量定义
typedef uint_16 uint_16_array[2];typedef char char_array[2];
uint_16_array 等价于 uint_16[2] 等价于 unsigned short[2]
char_array 等价于 char[2]
一般用这种方式,让自己的变量类型更容易理解
3. 二维数组定义
typedef int array[M][N]
array 等价于 int[M][N]
4. 函数声明定义
typedef int func(void);
func 等价于 int (void)类型函数
5. 函数指针定义
typedef int (*func)(void)
func 等价于int (*)(void)类型
func pfunc 等价于int (*pfunc)(void) 声明,pfunc是一个指向型如 int function(void) 声明的函数指针变量
PS:有人将typedef和#define混用,觉得typedef比#define好,并尽量用typedef代替#define,个人觉得这两个C语言的关键字是为了解决不同的事情,不能混在一起,从语法角度上,有些时候可能可以互相替换,但是如果你认同这种观点,我觉得是对这两个关键字的不理解,不是误用,是乱用。在理解这两个关键字的作用后,适当的,规矩的应用他们,会对代码质量有很大帮助,也能提高代码的优雅性。
- C语言 typedef 简单应用技巧
- C语言基础:C语言typedef(1) - typedef简单认识
- c语言简单应用
- 简单C语言应用
- C语言简单应用
- C语言应用小技巧
- [错误记录]C语言自定义类型typedef应用
- c语言 typedef用法
- c语言typedef
- C语言:typedef
- C语言:typedef
- C语言 typedef类型
- C语言 ---- typedef
- C语言中的typedef
- 【C语言】23-typedef
- C语言中的typedef
- C语言 typedef用法
- C语言-typedef
- 应该知道的Linux技巧
- 为什么要用存储过程
- Linux下如何使用蓝牙
- 数字证书
- 单链表的逆置
- C语言 typedef 简单应用技巧
- win32 ,在edit控件中删除字符后,在保存到文件,被删字符仍在文件中
- TCP“未来”性能
- 输入一个单向链表,输出该链表中倒数第k个结点
- Linux挂载和卸载文件系统
- Five Myths about Hash Tables
- 导入数据(ADO.Net)
- 操作符重载和复制构造函数
- Codeforces Round #160 (Div. 1)