指針

記錄一些指針的用法,參考《C和指針》數組

(1)int (*f)();  //函數指針;函數

肯定括號的含義是分析這個聲明的一個重要步驟。這個聲明有2對括號,每對的含義各不相同。第2對括號是函數調用操做符,但第1對括號只起到了聚組的做用。它破事間接訪問在函數調用以前進行,使f成爲一個函數指針,它所指向的函數返回一個整型值;指針

(2)int *(*f)()  //函數指針blog

這個同上面同樣,也是一個指向函數的指針,只不過所指向的函數返回的不是一個整型值了,而是一個整型指針;原型

(3)int f[];   //f是一個整形數組編譯器

(4)int *f[];  //指針數組;下表訪問的優先級高於間接訪問操做符;編譯

數組元素是指向整型的指針;float

 


 (5)int f()[];im

(6)int f[]();img

這兩個聲明是非法的,理解上也有點困難,既然是非法,就不解釋太多;

注意:一、函數只能返回標量值,不能返回數組;二、數組元素的長度必須是相同的,若是把(6)理解爲數組元素爲函數的數組的話,也是不成立的,由於不一樣的函數具備不一樣的長度,因此非法;

 


(7)int (*f[])();  //指針數組

經過*f[]能夠知道f爲一個元素爲某種類型的指針數組,表達式末尾的()是函數調用操做符,因此f是一個數組,數組元素的類型是函數指針;這些函數指針所指向的函數返回的是int類型值;

(8)int *(*f[])();  //指針數組

同上面相似,數組元素類型仍是函數指針, 只不過這些函數指針所指向的函數的返回值是一個整型指針;

 


 上面的是舊式風格的聲明,下面是完整的函數原型聲明:

(9)int (*f)(int, float);

這是一個函數指針,指針所指向的函數的入參:1個是整型值,1個是浮點值;

(10)int *(*g[])(int, float)

這是一個指針數組,數組元素的類型爲函數指針,這些函數指針所指向的函數的入參:1個是整型值,1個是浮點值;而且這些函數返回的是整型指針;

儘管原型增長了聲明的複雜度,但咱們仍是應該大力提倡這種風格,由於它向編譯器提供了一些額外的信息;

 

 

 

相關文章
相關標籤/搜索