我不知道为什么我的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