2010-04-05 25 views

回答

7

int *(*pfp)();

創建一個指向一個返回int *的功能。函數指針名稱是pfp

下面是一個例子:

int* myFunc(void) 
{ 
    return NULL; 
} 


int main(int argc, char**argv) 
{ 
    int *(*pfp) (void); 
    pfp = myFunc; 
    return 0; 
} 

注意:由於函數指針的參數不(無效),你給了,這意味着,參數列表中沒有C.指定在C++中,它意味着這是一個沒有參數的函數。

+0

而函數的參數也沒有指定。 (如果它沒有參數,它將是'int *(* pfp)(void);'而不是)。 – 2010-04-05 03:04:26

0

pfp是一個函數指針,它不接受參數(或C中的不確定參數)並返回指向int的指針。

使用「順時針螺旋」的規則是破譯複雜的C聲明的有效方法(至少我認爲是有效的):

4

Brian的解釋「是什麼」,但如果你好奇的原因,這裏的丹尼斯·裏奇的The Development of the C Language的摘錄:

是最清楚的,從它的前輩區別C中的第二個創新是這個更全面類型結構,特別是在聲明語法中的表達。 NB提供了基本類型int和char,以及它們的數組,以及指向它們的指針,但沒有其他組合方式。被要求概括:給出的任何類型的對象,它應該是可以描述一個新的對象,其收集幾個到一個數組,從函數產生,或者是指向它的指針。

對於這樣的構成的類型的每個目的,已經提底層對象的方式:索引數組,調用函數,使用間接運算符上的指針。類比推理導致名稱的聲明語法鏡像名稱通常出現的表達式語法的名稱。因此,

    int i, *pi, **ppi;

聲明的整數,一個指針到一個整數,指針的指針的整數。這些聲明的語法反映了當在表達式中使用時,i,* pi和** ppi都會產生int類型。類似地,

    int f(), *f(), (*f)();

聲明函數返回一個整數,函數返回一個指針的整數,一個指針指向一個函數返回的整數;

    int *api[10], (*pai)[10];

聲明指針數組爲整數,和一個指向整數數組。在所有這些情況下,變量的聲明類似於它在聲明頭部命名的表達式中的用法。

欲瞭解更多信息,請閱讀Steve Friedl的「Reading C type declarations」或Eric Giguere的「Reading C Declarations: A Guide for the Mystified」。