阅读754 返回首页    go 阿里云 go 技术社区[云栖]


深入理解typedef

                                                          深入理解typedef

 

关于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分析,看能不能分析透彻。

 

 


版权申明:
转载文章请注明原文出处https://blog.csdn.net/feiyinzilgd/archive/2010/12/14/6076396.aspx
并请联系谭海燕本人或者前往谭海燕个人主页留言

最后更新:2017-04-02 06:51:32

  上一篇:go typedef用法
  下一篇:go 移除UTF-8文件头的BOM