2012-07-10 38 views
2

我對此會非常模糊,我很抱歉。這是家庭作業,我正在努力學習一些東西,所以不要真的想要答案,而是要解釋一下。現在的問題是考慮C中函數的「數據類型」?

What is the datatype of thisThing 

這不是實際的代碼,但類似的例子

int* (*thisThing[])(int*, int*) = {someFunction1, someFunction2} 

從我瞭解的thisThing的「數據類型」簡直就是一個int。但是我從來沒有見過函數返回類型被稱爲「數據類型」。是否有一個原因?我知道在C中有指向函數的指針;這些指針與變量指針沒有區別嗎?任何解釋都非常感謝!

+0

我可以回答你的問題,但你的教育比一些無用的REP更重要。你應該自己找到這個東西。任何關於C的標準書籍都應該解釋這個陳述。考慮閱讀這個文檔http://www.cs.princeton.edu/courses/archive/fall05/cos217/lectures/08FuncPointerADT.pdf,然後詢問你沒有陳述的部分理解。 – Aftnix 2012-07-10 17:35:41

+0

大聲笑,我希望有更好的資源在線和便宜的書籍。 – 2012-07-10 17:37:51

+0

查看[this translator](http://cdecl.org/?q=int%2A%20(%2AthisThing [])(int%2A,%20int%2A))。閱讀「左右規則」。 – 2012-07-10 17:38:04

回答

3

thisThing的「數據類型」簡直就是一個int

它實際上是函數指針在指向的功能是數組:

int *fun(int *, int *); 

你應該看看spiral rule

+0

感謝您的出色鏈接。它似乎是K&R第5章中名爲複雜聲明部分的簡化版本。可惜我在大學第一年參加C課程時沒有SF(2006年) – Aftnix 2012-07-10 18:02:36

0

thisThing是一個指向數組的指針數組(指向整數的兩個指針作爲參數並將指針返回到整數的函數)。您可以閱讀「K & R」C書的複雜聲明章節。

0

可變aint

int a; 

變量的int陣列b

int b[] = {3, 4}; 

c變量是指向int

int *c = &a; 

還可以撰寫類型,例如,d是一個指針數組,以int

int *d[] = {c, b} 

變量e是指向一個函數返回int和採取一個指針int作爲單一參數:

int (*e)(int*); 

因此,什麼是thisThing的類型?顯然不是簡單的int ...

​​
0

「數據類型」不是在C標準中使用的術語;正確的術語是「類型」。

在你的情況,考慮到宣佈爲int* (*thisThing[])(int*, int*)一個值,你可以看到,它可稱爲:int *result = (*thisThing[0])((int *)0, (int *)0),所以其類型的名稱是指針的指定長度的陣列的功能回吐(指針到INT,指針指向int)並返回指向int的指針

函數指針是類似於指向數據不同;重要的是,它們不可互換,例如你不能強制轉換爲void *函數指針(而你可以用任何數據指針來做到這一點)。這是爲了確保您的程序在函數指針和數據指針具有不同表示的平臺上運行。