回答
int *(*pfp)();
創建一個指向一個返回int *的功能。函數指針名稱是pfp
。
下面是一個例子:
int* myFunc(void)
{
return NULL;
}
int main(int argc, char**argv)
{
int *(*pfp) (void);
pfp = myFunc;
return 0;
}
注意:由於函數指針的參數不(無效),你給了,這意味着,參數列表中沒有C.指定在C++中,它意味着這是一個沒有參數的函數。
pfp
是一個函數指針,它不接受參數(或C中的不確定參數)並返回指向int
的指針。
使用「順時針螺旋」的規則是破譯複雜的C聲明的有效方法(至少我認爲是有效的):
使用http://www.cdecl.org/這些東西,如果你不確定。
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」。
- 1. 「int k =((int)i)」是做什麼的?
- 2. 什麼是C#中的int?
- 3. FileOutputStream.write(int b)是做什麼的?
- 4. 「new int(100)」是做什麼的?
- 5. 什麼是int(x)真的在做什麼?
- 6. 什麼是(int - > int) - >(int - > int)是什麼意思?
- 7. C++:究竟是什麼「:」在這裏做?
- 8. 克++ __static_initialization_and_destruction_0(INT,INT) - 什麼是
- 9. 什麼是「int?」在C#類型中
- 10. 什麼是(int)在c#中的意思?
- 11. 什麼是新的Bytef [int]在C++中?
- 12. 什麼是++做這在C(藉助OpenMP)
- 13. 什麼是C#代碼做:
- 14. 這是做什麼的? C++
- 15. C在做什麼?
- 16. typedef在C++中做什麼
- 17. 這是什麼(C/C++)程序在做什麼?
- 18. 什麼(INT&)在C轉換++
- 19. 什麼是map [(int)x] ++;它做了什麼?
- 20. 什麼是「int * a =(int [2]){0,2};」準確地做?
- 21. 基值在int函數中做什麼?
- 22. 什麼是'std :;'在C++中做?
- 23. 在C#中,task.oncomplete是做什麼的?
- 24. 在C#中3'/'是做什麼的?
- 25. 在C#中,'| ='是做什麼的?
- 26. 我在做什麼錯? (C)
- 27. C++ - [=]做什麼?
- 28. 這個C++構造是做什麼的?
- 29. Select方法在c#int數組上做什麼
- 30. C++編譯器在讀取「int * p」時做了什麼?
而函數的參數也沒有指定。 (如果它沒有參數,它將是'int *(* pfp)(void);'而不是)。 – 2010-04-05 03:04:26