我不知道爲什麼我的Microsoft Visual C++ 2010 Express不支持這樣的代碼:無效名稱(類型名稱1,類型名稱2,類型名稱3 [名稱1] [名稱2]);
void ar(int n,int m, short ar[n][m]);
這種情況發生的事情是,字母n和m在紅被臥底,它說:
//Error: a parameter is not allowed.
我在C編碼,目前正試圖瞭解指針和數組。
我不知道爲什麼我的Microsoft Visual C++ 2010 Express不支持這樣的代碼:無效名稱(類型名稱1,類型名稱2,類型名稱3 [名稱1] [名稱2]);
void ar(int n,int m, short ar[n][m]);
這種情況發生的事情是,字母n和m在紅被臥底,它說:
//Error: a parameter is not allowed.
我在C編碼,目前正試圖瞭解指針和數組。
您不能讓傳遞的數組大小依賴於一個變量(此外,傳遞給相同的簽名)。它在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啓用顯宗設置或者你非常需要一個體面的編譯器。
這意味着:立即將參數重命名爲別的東西。 – 2013-05-05 19:40:45
當我這樣寫: void ar(int n,int m,short ar [] []);它編譯爲第一個括號,最後一個括號是數組,兩個] [就像編譯器認爲我聲明的數字。然後它也不起作用。錯誤。一個數組可能沒有這種類型的元素 – user2283719 2013-05-05 19:45:43
然後嘗試'void ar(int n,int m,short ** ar)'。如果可行,請獲得更符合標準的編譯器,如Clang,Intel或GCC。 – 2013-05-05 19:49:43
試試這個:
void ar(int,int,short (*)[]);
如果它是一個聲明,
void ar(int m,int n,short (*ar)[]){} // Refer my Edit
它它的函數的定義。
編輯你真的使用相同的名稱爲函數和二維數組,你試圖作爲參數傳遞給函數?
我想生產的東西是:void ar(int n,int m,short(* ar)[]) { \t int r; \t int c; \t爲(R = 0; R
在問題中發佈完整的代碼。編輯它。 – 2013-05-05 19:57:32
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;
}
那是一個聲明或定義嗎? – 2013-05-05 20:05:48