void (*funcPtr)();
上面聲明瞭一個指向函數的指針,當碰到這樣一個比較複雜的聲明時,最好的方法是從 中間開始和向外擴展:
- 從中間開始:即 從變量名開始
- 像外擴展:即 先注意右邊最近的項,已右括號結束,再注意左邊的項,已左括號結束,再注意右邊的項。。。
用上述方法來解析一下第一個聲明:
- 往右看:是右括號,結束
- 往左看:funcPtr是個指針
- 往左看:碰到左括號,結束
- 往右看:指針指向一個函數,即:指向函數的指針
- 向左看:函數的返回值類型是 void,即:指向返回值爲 void 的函數
再看第二個例子:
void * (*(*fp1)(int))[10];
- 往右看:是右括號,結束
- 往左看:fp1 是個指針
- 往左看:是左括號,結束
- 往右看:fp1 指向一個 參數爲 int 的函數(因爲函數是
()
指示的,碰到了)
下一步就往左看) - 往左看:函數返回一個指針
- 往左看:是左括號,結束
- 往右看:指針指向一個 數組
- 往左看:數組類型爲 void *
即:fp1是一個函數指針,指向的函數 接收 int 爲參數,返回一個指針,這個指針指向一個 10 個元素的數組,數組類型爲 void *
參考資料
C++編程思想:P109-110