关于typedef的用法,网上已经有很多前辈总结过了,在这里我不想标新立异,代码阅历不一样,所理解的typedef的层次各有不同。这里,我想就我所理解的typedef用更加通俗易懂的方式写出来。
在开始之前,要始终牢记:
typedef的本质是取一个别名
先从简单的说起:
- typedef alias type型
这里,typedef后面有2个量。这种方式是我们通常见到的最多的用法
typedef i_type int; i_type sun;
Linux下面,变量命名不能将就匈牙利命名法。
typedef就是为一种类型取别名,我们用这个别名去定义变量,那么该变量的类型就是别名的原始引用(可能说引用有些不太恰当)
i_type是int的别名。
那么用i_type去定义变量
i_type sun
实际上就是对原始类型(这里的原始变量是指int)的引用
即int sun
typedef alias type这种类型的还很多。
例如:
typedef struct Node{ int type; ..... }inode; /* 定义了一个结构体变量。如果没有typedef,我们定义结构体变量的时候,需要加struct关键字。 */ inode nod; /* 就上面的定义, 同样,我们一步一步的分析。 首先,去掉typedef关键字 inode是什么? 回答:inode是struct Node的一个结构体变量。 然后,加上typedef。 inode是什么? 回答:inode是一个别名 是谁的别名? 回答:是结构体变量的别名。 既然走到这里,一切都好办了。 */ inode nod; /* 再来。既然上面已经说清楚了。inode是结构体变量的别名。 那么,根据别名是对原始类型的引用的理论。上面的语句中,别名的原始类型是结构体变量。 那么,nod是什么? 回答:nod是结构体变量 */
这样的例子还很多,我就不一一列举了。
- typedef express 型
这里,typedef,后面只有包含了别名的一个量或者一个表达式。
先举一个例子
typedef void (*func)(int, char); func set; /* 同样,先说说func是什么。 在这里,func表示一个函数指针,该函数有int char两个变量。 所以,func就是一个带两个参数函数的指针 所以,set就是一个带两个参数的函数指针的变量。 既然如此,set就是一个带有两个参数的函数的入口地址。 */ (*set)(int ,'a');//所以,这里就是合法的 /* 若果没有typedef的话,我们需要3步来完成这个任务 void func(int, char); void (*set)(int ,char); set = &func; set = func也是合法的,这里只是为了强调地址 set = func这种用法参考谭浩强《C语言程序设计》(第三版)P261的小例子 */
分析道这里。你应该大概能看到typedef的意思了。
typdef char* point;
去掉typedef,point是一个指向char类型的指针。
那么
point ptr
ptr也就是一个指向char的指针。
为了验证自己的理解,可以随便找几个typedef分析,看能不能分析透彻。
版权申明:
转载文章请注明原文出处http://blog.csdn.net/feiyinzilgd/archive/2010/12/14/6076396.aspx
并请联系谭海燕本人或者前往谭海燕个人主页留言