0

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

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

发生的事情是字母 n 和 m 被红色隐藏起来,它说:

//Error: a parameter is not allowed.

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

4

3 回答 3

0

尝试这个:

   void ar(int,int,short (*)[]);

如果它是一个声明并且

void ar(int m,int n,short (*ar)[]){} // Refer my Edit

它是函数的定义。

编辑您是否真的为函数和您尝试作为参数传递给函数的二维数组使用相同的名称?

于 2013-05-05T19:36:03.993 回答
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 中启用了非标准的、公开的设置,要么你非常需要一个像样的编译器。

于 2013-05-05T19:39:51.413 回答
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;
}
于 2013-05-05T20:33:49.603 回答