int、char、const、volatile 等*、陣列 []、函數 ()、括號 ()( ) 內的部分()(函數)、[](陣列) —— 右結合*(指標) —— 右結合const/volatile:緊鄰型別時修飾型別,否則修飾左側指標char * const *(*next)();next(*next) → next 是指標(*next)() → 指向函數的指標,該函數傳回…* (*next)() → 傳回指標char * const * → 指向 char 的 常數指標(指標本身不可修改)結論:next 是一個指標,指向一個函數,該函數傳回一個「指向 char 的常數指標」。
int *(*p[])();p(*p[]) → p 是陣列,元素為指標(*p[])() → 陣列元素為「指向函數的指標」int *(*p[])() → 函數傳回 int *結論:p 是一個陣列,每個元素是指向函數的指標,該函數傳回 int *。
void (*signal(int sig, void (*func)(int)))(int);signalsignal(int sig, void (*func)(int)) → signal 是函數,參數為 int 和函數指標 func(*signal(...))(int) → 傳回函數指標,該函數接受 int 傳回 void結論:signal 是一個函數,接受訊號編號與處理函數指標,傳回前一個處理函數指標(標準 signal() 簽章)。
const char *p; // p 是指標,指向 const char(常數指標) char const *p; // 同上 char * const p; // p 是 const 指標,指向 char(指標常數) const char * const p; // 指向 const char 的 const 指標
cdecl:命令列工具,輸入宣告輸出英文解釋