一般書籍上關於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()是一個函數,返回值爲一個函數指針