如何理解 C 语言中的 typedef

作者:Skycell
链接:https://www.zhihu.com/question/19894694/answer/13278588

先熟悉函数指针的声明形式:数据类型 (* 指针变量名) (形参列表); 

函数指针—指向函数的指针  指针函数—返回指针的函数

例如: int (* func)(void);//这是一个变量声明语句(指针函数的声明),声明了一个函数指针变量func,注意区别指针函数和函数指针。 func = &test; //变量赋值(给指针函数赋值);

那么现在来理解typedef int (* func)(void)语句;
1.去掉"typedef"得到一个正常的变量声明语句(指针函数声明): int (*func)(void);这里变量func的类型为一个函数类型,而当加上”typedef"后,就得到一个新的类型, 原来的变量名称func就变成新类型的名称,func不再是变量名称,而是一个新类型名--func,用这个新的类型就可以去定义和原来func变量相同类型的变量,注意看去除和加上"typedef“时func的变化,没有"typedef"时,func为变量名,加上"typedef"时,func为类型名(这个类型等同于原来func变量的类型),因此下面正确:

typedef int (* t_func)(void);//定义了一个新类型 t_func;
int (*func)(void); 变量声明语句(指针函数声明):
//....
t_func func2 = func; //func2和func是相同类型,这就好理解加上"typedef"产生的变化了。

可以这么想,加上"typedef"关键字后,原来语句声明的变量变成类型,以下正确:
1. int id; ==> typedef int ID; //在加上"typedef"后,变量id就变成类型ID(为了清楚,把类型变大写),这个新类型等同于原来变量对应的类型; id <==>ID id ;
2. int a[10]; ==> typedef int A[10];//加上"typedef"后,变量a就成了类型A(为了清楚,把类型变大写),这个新类型等同于原来变量对应的类型; a <=> A a;

因此typedef就好理解。

猜你喜欢

转载自blog.csdn.net/songer93/article/details/79993205