2014-04-02 86 views
3

予有這種類型的定義指針的函數陣列用C

int (*af[10])(int , *a[10][10])(int,int) 

的,我不得不「翻譯」它就像「這是函數指針的10陣列大小」等等等等我認爲這裏有個錯誤,導致*a[10][10]沒有定義類型。它是否正確?或者這行可以正確翻譯?

在此先感謝


最後我發現,正確的定義應該是這樣的

int (*af[10])(int ,int (*a[10][10])(int,int)) 

這是正確的,是有道理的。

+0

這是一個語法錯誤,因爲?缺少定義類型到第二個數組還是? – yakamuki

+0

看起來像一個指向返回函數指針的函數的指針。請閱讀它,如「如果我採取af,給它一個索引從0到9,解引用它,然後用兩個參數調用結果,其中一個是int,另一個可能拼錯,然後用兩個int參數調用結果,那麼我得到一個int「。 – gnasher729

+0

@yakamuki「a」的類型不完整。 –

回答

5

這不是有效的C聲明。首先,缺少a的類型。但更糟的是,它好像(*af[10])(int , *a[10][10])正在返回一個函數(這是不可能的)。

也許你的意思是:

int (*(*af[10])(int , int *a[10][10]))(int,int) 

這將使af 10個指針數組功能接收int和10個陣列,10個指針數組int,並返回一個函數指針接收兩個int小號並返回int

編輯:

貌似正確的路線是:

int (*af[10])(int ,int (*a[10][10])(int,int)) 

這使得af 10個指針的數組起作用接收2個參數和返回int。第一個參數是int,第二個參數是多維數組(10x10)或功能指針,接收函數爲2 int s並返回int

未來,您可能需要檢查cdecl.org以確認您的猜測。

+0

是的,這就是我想要的,但是當我對這些進行修正時,我得到了一個否定的答案,至此這是正確的語法(根據它們)。 – yakamuki

+0

@yakamuki據誰? –

+0

我被要求翻譯這一行的課程,這就是爲什麼我這裏很困惑.. – yakamuki

0

我認爲af實際上是一個數組:

af[10] 

數組包含指針:

*af[10] 

這些都是函數指針:

int (*af[10])(...) 

和參數列表有語法錯誤,可能是int之後的逗號有錯誤:

int (*af[10])(int *a[10][10]) 

而其餘的行是垃圾。