C和指標--高階宣告
阿新 • • 發佈:2018-11-11
1.
int *f();
分析:必須確定表示式*f()是如何進行求值的。首先執行的是函式呼叫操作符(),因為它的優先順序高於間接訪問操作符。因此,f是一個函式,它的返回值型別是一個指向整型的指標。
2.
int (*f)();
分析:確定括號的含義是分析這個宣告的一個重要步驟。第2對括號是函式呼叫操作符,第1對括號只起到聚組的作用。它迫使間接訪問在函式呼叫之前進行,使f成為一個函式指標,它所指向的函式返回一個整型值。
3.
int *(*f)();
分析:這個和第2個宣告基本相同,f也是一個函式指標,只是所指向的函式的返回值是一個整型指標,必須對其進行間接訪問操作才能得到一個整型值。
4.
int *f[];
分析:下標的優先順序更高,所以f是一個數組,它的元素是指向整型的指標。
5.
int (*f[])();
分析:首先,必須找到所有操作符,然後按照正確的次序執行它們。同樣,這裡有兩對括號,它們分別具有不同的含義。括號內的表示式*f[]首先進行求值,所以f是一個元素為某種型別的指標的陣列。表示式末尾的()是函式呼叫操作符,所以f肯定是一個數組,陣列元素的型別是函式指標,它所指向的函式的返回值是一個整型值。
6.
int *(*f[])();
分析:由5,這個宣告建立了一個指標陣列,指標所指向的型別是返回值為整型指標的函式。