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()是一個函數,返回值爲一個函數指針





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章