typedef用法如下。
1、隐藏笨拙且难以理解的语法,使用typedef为现有类型创建别名,定义易于记忆的类型名。typedef
还可以掩饰复合类型,如指针和数组。
2、typedef的最简单使用,给已知数据类型long起个新名字,例如叫byte_4。
3、typedef与结构结合使用,这语句实际上完成两个操作:
1)
定义一个新的结构类型。
2)
typedef为这个新的结构起了一个名字,叫MyStruct。
4、typedef和define的问题,typedef要比define要好,特别是在有指针的场合。
5、define宏定义有一个特别的长处:可以使用ifdef
,ifndef等来进行逻辑判断,还可以使用undef来取消定义。
参考资料来源:搜狗百科— typedef
简单的说,就是起了一个别名,举个例子:
typedef int integer;
把int自定义成 integer后
int a;和integer a;是等价的,但对于结构体和联合体来说,自定义类型,可以减少输入量!
自定义类型还有方便移植的好处!
如果CPU由16位机移到32位机,你只需要把声明的头文件typedef int integer;改成typedef long integer;就行了,不必去修改程序内容
typedef常见用法
1.常规变量类型定义
例如:typedef
unsigned
char
uchar
描述:uchar等价于unsigned
char类型定义
uchar
c声明等于unsigned
char
c声明
2.数组类型定义
例如:
typedef
int
array[2];
描述:
array等价于
int
[2]定义;
array
a声明等价于int
a[2]声明
扩展:
typedef
int
array[M][N];
描述:
array等价于
int
[M][N]定义;
array
a声明等价于int
a[M][N]声明
3.指针类型定义
例如:
typedef
int
*pointer;
描述:
pointer等价于
int
*定义;pointer
p声明等价于int
*a声明
例如:
typedef
int
*pointer[M];
描述:
pointer等价于
int
*[M]定义
pointer
p声明等价于int
*a[M]声明明
4.函数地址说明
描述:C把函数名字当做函数的首地址来对待,我们可以使用最简单的方法得到函数地址
例如:
函数:int
func(void);
unsigned
long
funcAddr=(unsigned
long)func,
funcAddr的值是func函数的首地址
5.函数声明
例如:
typedef
int
func(void);
func等价于
int
(void)类型函数
描述1:
func
f声明等价于
int
f(void)声明,用于文件的函数声明
描述2:
func
*pf声明等价于
int
(*pf)(void)声明,用于函数指针的生命,见下一条
6.函数指针
例如:
typedef
int
(*func)(void)
描述:
func等价于int
(*)(void)类型
func
pf等价于int
(*pf)(void)声明,pf是一个函数指针变量
7.识别typedef的方法:
a).第一步。使用已知的类型定义替代typdef后面的名称,直到只剩下一个名字不识别为正确
如typedef
u32
(*func)(u8);
从上面的定义中找到
typedef
__u32
u32;typedef
__u8
u8
继续找到
typedef
unsigned
int
__u32;typedef
unsigned
char
__u8;
替代位置名称
typedef
unsigned
int
(*func)(void);
现在只有func属于未知。
b).第二步.未知名字为定义类型,类型为取出名称和typedef的所有部分,如上为
func等价于unsigned
unsigned
int
(*)(unsigned
char);
c).第三部.定义一个变量时,变量类型等价于把变量替代未知名字的位置所得到的类型
func
f等价于unsigned
unsigned
int
(*f)(unsigned
char)
不是用bintnode来代替node
是用bintnode来代替
struct
node
struct
node是一个结构体的类型名
就像是int是个类型名一样
如果你不用typedef的话
以后你定义结构体变量就要像这样定义struct
node
变量名
和int
变量名
一样
很麻烦
如果用了typedef的话
只要用(上面你的例子)
bintnode
来代替
struct
node
就变成了
bintnode
变量名
这样看起来很清楚了