typedef的使用

一般书籍上关于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()是一个函数,返回值为一个函数指针





已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页