void Name(类型name1,类型name2,类型name3 [name1] [name2]);

时间:2013-05-05 19:32:16

标签: c arrays void

我不知道为什么我的Microsoft Visual C ++ 2010 Express不支持这样的代码:

void ar(int n,int m, short ar[n][m]);

发生的事情是,字母n和m以红色覆盖,并说:

//Error: a parameter is not allowed.

我在C编码,目前正在尝试学习指针和数组。

3 个答案:

答案 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;
}