2016-05-13 142 views
0

在下面我的例子不明白爲什麼我得到這個錯誤:不完整的類型元素[2] []

test.c:3:6: error: array type has incomplete element type 

這裏,編譯器應該考慮一個完整的類型[2][3]因爲每個子元素的大小爲3.那麼,問題在哪裏?

long foo[2][] = { 
    {2,3,4}, 
    {5,6,7} 
}; 

如果我完成使用foo[2][3]我會得到這個錯誤類型:

test.c:9:5: note: expected ‘long int *’ but argument is of type ‘long int (*)[3]’ 
int bar(long* list, size_t size) 

使用這個例子:

int bar(long* list, size_t size); 

int main() {  
    bar(&foo[0], sizeof(foo[0])); 
    return 0; 
}  

我怎樣才能解決這個問題?

+0

[傳遞二維數組的結構]可能的副本(http://stackoverflow.com/questions/35614862/passing-a-2d-array-of-structs) – Olaf

+1

'bar(foo [0] ,sizeof foo [0]/sizeof foo [0] [0])' –

回答

2

Here, the compiler should consider a complete type i.e. [2][3] because each sub-element has a size of 3. So, where is the problem?

你如果有喜歡的:

long foo[2][] = { 
    {2,3,4}, 
    {5,7} 
}; 

編譯器在這種情況下應該做什麼?是[2][2]還是[2][3]

在C中,只能省略數組的最左邊的的。所以,你可以這樣做:

long foo[][3] = { 
    {2,3,4}, 
    {5,6,7} 
}; 

相關的職位:why c/c++ allows omission of leftmost index of a multidimensional array in a function call?

note: expected ‘long int ’ but argument is of type ‘long int ()[3]’ int bar(long* list, size_t size)

這是因爲類型傳遞和bar期望不匹配。我個人的選擇是使用:

int bar(long (*list)[3], size_t size) { 

} 

,並呼籲:

bar(foo, sizeof foo/sizeof foo[0]); 

但也有其他辦法了。參見:How to pass 2D array (matrix) in a function in C?

0

是下面的代碼不會編譯爲:

long foo[2][] = { 
    {2,3,4}, 
    {5,6,7} 
}; 

聲明 '富' 作爲多維數組必須針對所有維度邊界除第一 長foo的[2] [] = {

的你可以成功編譯下面的代碼:

long foo[][3] = { 
    {2,3,4}, 
    {5,6,7} 
}; 

我能夠成功編譯下面的代碼:

long foo[2][3] = { 
     {2,3,4}, 
     {5,6,7} 
    }; 


^
+0

您未覆蓋第二個錯誤:'test.c:9:5:note:expected'long int *'但參數的類型爲' long int(*)[3]'' –

3

只能離開了最左側的維度,即你可以做

long foo[][3] = { { 2, 3, 4 }, { 5, 6 ,7 } }; 

但不是周圍像你試過的其他方式。它根本不被支持,也許是因爲檢查所有子陣列的長度是相同的被認爲是代價高昂的,或者別的什麼。

對於第二個問題,您在錯誤中得到一個*的事實應該導致您在呼叫中刪除&。你想要的子數組,它會衰減到指向第一個元素的指針,而不是指向數組的指針。

此外,請記住sizeof返回的char的號碼大小,所以對於一個數組,你需要縮小:

bar(foo[0], sizeof foo[0]/sizeof foo[0][0]); 
+0

在你的例子中,我仍然得到錯誤'note:expected'long int *'但參數的類型是'long int(*)[3]'' – nowox

相關問題