記錄一些指針的用法,參考《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個是浮點值;而且這些函數返回的是整型指針;
儘管原型增長了聲明的複雜度,但咱們仍是應該大力提倡這種風格,由於它向編譯器提供了一些額外的信息;