c++複雜聲明

void (*funcPtr)();

上面聲明瞭一個指向函數的指針,當碰到這樣一個比較複雜的聲明時,最好的方法是從 中間開始和向外擴展

  • 從中間開始:即 從變量名開始
  • 像外擴展:即 先注意右邊最近的項,已右括號結束,再注意左邊的項,已左括號結束,再注意右邊的項。。。

用上述方法來解析一下第一個聲明:

  • 往右看:是右括號,結束
  • 往左看:funcPtr是個指針
  • 往左看:碰到左括號,結束
  • 往右看:指針指向一個函數,即:指向函數的指針
  • 向左看:函數的返回值類型是 void,即:指向返回值爲 void 的函數

再看第二個例子:

void * (*(*fp1)(int))[10];
  • 往右看:是右括號,結束
  • 往左看:fp1 是個指針
  • 往左看:是左括號,結束
  • 往右看:fp1 指向一個 參數爲 int 的函數(因爲函數是 () 指示的,碰到了 ) 下一步就往左看)
  • 往左看:函數返回一個指針
  • 往左看:是左括號,結束
  • 往右看:指針指向一個 數組
  • 往左看:數組類型爲 void *

即:fp1是一個函數指針,指向的函數 接收 int 爲參數,返回一個指針,這個指針指向一個 10 個元素的數組,數組類型爲 void *

參考資料

C++編程思想:P109-110

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