右左法則: 從最内部的括号開始閱讀,向右看,然後向左看.當碰到一個括号時就掉轉閱讀的方向.括号内的所有内容都分析完畢就跳出括号的範圍.這樣繼續,直到整個聲明都被分析完畢.
int* (* (*fp1)(int) )[10];
1. 從變量名開始---fp1
2. 往右看,什麼也沒有,碰到),是以往左看,碰到一個*----一個指針
3. 跳出括号,碰到(int)----一個帶一個int參數的函數.
4. 往左看,發現一個*----(函數)傳回一個指針.
5. 跳出括号,往右看,碰到[10]----一個10元素的數組
6. 往左看,發現一個*----指針.
7. 往左看,發現一個int----int類型.
總結:fp1被聲明成為一個函數的指針,該函數傳回指向指針數組的指針.
int* (* ( * arr[5])() )();
1. 從變量名開始---arr
2. 往右看,發現是一個數組----一個五個元素的數組
3. 往左看,發現一個*----指針.
4. 跳出括号,往右看,發現()----一個不帶參數的函數.
5. 往左看,碰到*----(函數)傳回一個指針.
6. 跳出括号,向右發現()----不帶參數的函數.
7. 向左,發現*----(函數)傳回一個指針.
8. 繼續向左,發現int----int類型
總結 arr被聲明成為一個函數的指針數組,該函數傳回指向函數指針的指針