我不知道为什么我的Microsoft Visual C++ 2010学习版不支持这样的代码:
void ar(int n,int m, short ar[n][m]);发生的事情是字母n和m被红色覆盖,它说:
//Error: a parameter is not allowed.我正在用C语言编写代码,目前正在尝试学习指针和数组。
发布于 2013-05-06 03:39:51
你不能让传递的数组大小依赖于一个变量(而且,在同一个签名中传递)。它在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中启用了非标准的开放式设置,要么是你非常需要一个像样的编译器。
发布于 2013-05-06 03:36:04
试试这个:
void ar(int,int,short (*)[]);如果这是一个声明
void ar(int m,int n,short (*ar)[]){} // Refer my Edit这是函数的定义。
编辑,您是否真的对函数和您试图作为参数传递给函数的2D数组使用相同的名称?
发布于 2013-05-06 04:33:50
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;
}https://stackoverflow.com/questions/16388313
复制相似问题