1. 程式人生 > >C和指標--高階宣告

C和指標--高階宣告

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,這個宣告建立了一個指標陣列,指標所指向的型別是返回值為整型指標的函式。