signal函數理解或者void (*signal(int signum,void(*handler)(int)))(int)理解

把void (*signal(int signum,void(*handler)(int)))(int)分紅兩部分:linux

typedef void (*sighandler_t)(int);數組

sighandler_t signal(int signum, sighandler_t handler);app


此處因爲加了typedef自定義了一個新類型sighandler_t,因此第二行的函數原型看起來順眼多了,形式跟int func(char c, int i)無異,可是若是看不懂typedef語句,這兩句話仍然是噩夢。函數

要理解typedef,只要記住一句話就差很少了,那就是:typedef在語句中所起的做用只不過是把語句原先定義變量的功能變成了定義類型的功能而已。咱們只消看幾個例子當即明白。spa

例如語句 typedef int *apple; 理解它的正確步驟是這樣的:先別看typedef,就剩下int *apple; 這個語句再簡單不過,就是聲明瞭一個指向整型變量的指針apple (注意:定義只是一種特殊的聲明),加上typedef以後就解釋成聲明瞭一種指向整型變量指針的類型apple .net

如今,回過來看上面的這個函數原型 typedef void (*sighandler_t)(int),蓋住 typedef不看 ,再簡單不過,sighandler_t就是一個函數指針,指向的函數接受一個整型參數並返回一個無類型指針 。加上typedef以後sighandler_t就是一種新的類型,就能夠像int同樣地去用它,不一樣的是它聲明是一種函數指針,這種指針指向的函數接受一個整型參數並返回一個無類型指針 。怎麼樣?簡單吧。指針

再來作一個更酷的練習,請看:typedef char *(* c[10])(int **p);blog

去 掉typedef就變成char *(* c[10])(int **p),先無論這個語句有多難看,它必定是聲明瞭一個擁有10個元素的數組c對不對?okay沒什麼了不得的,只不過這個數組c的元素有點特別,它們都 是函數指針,而且它們所指向的這些函數通通都接受一個二級指針而後返回一直指向字符型的指針。加上typedef以後,c就不是一個數組了,而是一種類型 了 。原型

 

轉自:http://blog.csdn.net/linux_wgl/article/details/6923152變量

相關文章
相關標籤/搜索