关于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
并请联系谭海燕本人或者前往谭海燕个人主页留言