C/C++系列 --- typedef與函數指針

typedef是一種有趣的聲明方式,它爲一種類型引入新的名字,而不是爲變量分配空間。

一般情況下,typedef用來簡潔地表示指向其他東西的指針。

以signal()原型的聲明爲例。

signal()是一種系統調用,用於通知運行時系統,當某種特定的軟件中斷髮生時調用特定的程序。

當你調用signal(),需要通過參數傳遞告訴它中斷的類型以及用於處理中斷的程序。

signal()聲明如下:

void *(signal(int sig, void (*func)(int)))(int);

讓我們用剛纔掌握的技巧來分析這個聲明,會發現它的意思如下:

void (*signal(    ) )(int);

signal是一個函數,它返回一個函數指針,後者所指向的函數接受一個int參數,並返回void。

其中一個恐怖的參數就是其本身:

void (*func)(int);

它表示一個函數指針,鎖指向的函數接受一個int參數,返回值是void。

現在讓我們體會一下,怎樣用typedef來代替通用部分,從而進行簡化。

typedef void (*ptr_to_func)(int);
// 它表示ptr_to_func是一個函數指針,該函數接受一個int參數,返回值爲void

ptr_to_func signal(int,ptr_to_func);
// 它表示signal是一個函數,它接受連個參數,
// 其中一個是int,另一個是ptr_to_func,返回值是ptr_to_func

 

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