一般书籍上关于type得分的描述,都不怎么全面,仅知道typedef是为变量命名别名。于是,下面的一些命名也是便于理解的。
typedef int my_int; my_int iint; // 定义一个int型变量 typedef char* c_point; c_point my_point; //定义一个char*指针
但是遇到类似于
typedef char *p 貌似有点不太好理解。按为一个已知类型命名别名那么
typedef myint int; typedef int myint;
貌似也没什么区别,真的没有嘛?
以个人理解阅读typedef定义的类型时将typedef去掉,即为定义一般变量,即可看出未知变量的类型。以下为typedef为不同类型变量命名别名。
typedef char *mychar_point ; //去掉typedef即为char *mychar_point ,故可看出为char *定义了一个新的别名,mychar_point mychar_point p; //于是p为一个指针,指向一个char型的数据
定义数组
typedef int myarray[5]; //同上,去掉typedef可看出重命名了一个int型数组,数组中有5个元素。 myarray iarry; // 有了上面的重命名,以后就可以这样方便的定义int[5]的数组了
定义数组指针
typedef int (*myarray_point)[5];
myarray_point iarry_point;
定义指针数组
typedef int *myarray_point[5];
myarray_point iarry_point;
定义函数指针
typdedef (*pointer)(paramer list); pointer my_pointer;
typdedef pointer(paramer list); pointer *my_pointer; //定义pointer my_pointer;没什么意义
最后看一个复杂的
void (*signal(int signum,void(*handler)(int)))(int)
该函数可理解为
typedef void (*seg)(int); seg signel(int signum,seg handler);
如果直接看按照右左法则的读法,很容易可以看出handler是一个函数指针,指向一个无返回值,带一个参数int的函数,signal是一个函数,函数有两个参数一个是int,另一个是函数指针,该函数返回值为函数指针,指向void型参数为int的函数。
另一种理解方法:
void(*p)(int)很好理解p是一个函数指针指向一个无返回值,带一个参数int的函数,
void(*fun())(int)fun()是一个函数,返回值为一个函数指针