2013-05-05 150 views

回答

0

您不能讓傳遞的數組大小依賴於一個變量(此外,傳遞給相同的簽名)。它在Clang編譯,但它不是合法的C89,它是C99和AFAIK微軟VC並不完全支持這一點。

請注意:您正在通過相同的名稱調用函數及其參數,這可能會導致有趣且模糊的錯誤。 重命名函數或最後一個參數。

編輯:嘗試編譯如下:

void ar(int n,int m, short ars[n][m]) 
{ 
} 

int main() 
{ 
    short a[1][2] = {{22,22}}; 
    ar(1,2,a); 
} 

它去細整個安裝在我的系統上所有的編譯器,因此,如果它不編譯,或者你在非標準的,在你的IDE啓用顯宗設置或者你非常需要一個體面的編譯器。

+0

這意味着:立即將參數重命名爲別的東西。 – 2013-05-05 19:40:45

+0

當我這樣寫: void ar(int n,int m,short ar [] []);它編譯爲第一個括號,最後一個括號是數組,兩個] [就像編譯器認爲我聲明的數字。然後它也不起作用。錯誤。一個數組可能沒有這種類型的元素 – user2283719 2013-05-05 19:45:43

+0

然後嘗試'void ar(int n,int m,short ** ar)'。如果可行,請獲得更符合標準的編譯器,如Clang,Intel或GCC。 – 2013-05-05 19:49:43

0

試試這個:

void ar(int,int,short (*)[]); 

如果它是一個聲明,

void ar(int m,int n,short (*ar)[]){} // Refer my Edit 

它它的函數的定義。

編輯你真的使用相同的名稱爲函數和二維數組,你試圖作爲參數傳遞給函數?

+0

我想生產的東西是:void ar(int n,int m,short(* ar)[]) { \t int r; \t int c; \t爲(R = 0; R user2283719 2013-05-05 19:51:46

+0

在問題中發佈完整的代碼。編輯它。 – 2013-05-05 19:57:32

0

VC(C89)不能像你的代碼那樣寫。

爲VC這樣

#include <stdio.h> 

void ar(int n,int m, short *a){ 
    int i,j, total=0; 
    for(i=0;i<n;++i) 
     for(j=0;j<m;++j) 
      total += a[i*m+j]; 
    printf("total=%d\n", total); 
} 
int main(void){ 
    short a[2][3] = {{1,2,3},{4,5,6}}; 
    ar(2, 3, a);// a -> &a[0][0] 
    return 0; 
}