我不知道为什么我的Microsoft Visual C ++ 2010 Express不支持这样的代码:
void ar(int n,int m, short ar[n][m]);
发生的事情是,字母n和m以红色覆盖,并说:
//Error: a parameter is not allowed.
我在C编码,目前正在尝试学习指针和数组。
答案 0 :(得分:0)
试试这个:
void ar(int,int,short (*)[]);
如果是宣言并且
void ar(int m,int n,short (*ar)[]){} // Refer my Edit
它是函数的定义。
编辑您是否真的使用与您尝试传递的函数和2D数组相同的名称作为函数的参数?
答案 1 :(得分:0)
您不能让传递的数组大小依赖于变量(此外,传入相同的签名)。它在Clang编译,但它不合法C89,它是C99和AFAIK Microsoft VC并不完全支持它。
注意:您使用相同的名称调用函数及其参数,这可能会导致有趣,模糊的错误。 重命名该功能或最后一个参数。
编辑:尝试编译:
void ar(int n,int m, short ars[n][m])
{
}
int main()
{
short a[1][2] = {{22,22}};
ar(1,2,a);
}
它在我的系统上安装的所有编译器都很顺利,所以如果它没有编译,你要么在IDE中启用了非标准的,开放的设置,要么你需要一个不错的编译器。
答案 2 :(得分: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;
}