首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >空名称(类型name1,类型name2,类型name3[name1][name2] );

空名称(类型name1,类型name2,类型name3[name1][name2] );
EN

Stack Overflow用户
提问于 2013-05-06 03:32:16
回答 3查看 125关注 0票数 0

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

代码语言:javascript
复制
void ar(int n,int m, short ar[n][m]);

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

代码语言:javascript
复制
//Error: a parameter is not allowed.

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-05-06 03:39:51

你不能让传递的数组大小依赖于一个变量(而且,在同一个签名中传递)。它在Clang中编译,但它不是合法的C89,它是C99,AFAIK Microsoft VC并不完全支持它。

注意:您正在使用相同的名称调用函数及其参数,这可能会导致有趣的、晦涩的错误。重命名函数或最后一个参数。

编辑:尝试编译以下代码:

代码语言:javascript
复制
void ar(int n,int m, short ars[n][m])
{
}

int main()
{
    short a[1][2] = {{22,22}};
    ar(1,2,a);
}

它在我的系统上安装的所有编译器上都运行得很好,所以如果它不能编译,要么是你的IDE中启用了非标准的开放式设置,要么是你非常需要一个像样的编译器。

票数 0
EN

Stack Overflow用户

发布于 2013-05-06 03:36:04

试试这个:

代码语言:javascript
复制
   void ar(int,int,short (*)[]);

如果这是一个声明

代码语言:javascript
复制
void ar(int m,int n,short (*ar)[]){} // Refer my Edit

这是函数的定义。

编辑,您是否真的对函数和您试图作为参数传递给函数的2D数组使用相同的名称?

票数 0
EN

Stack Overflow用户

发布于 2013-05-06 04:33:50

VC (C89)不能像您的代码那样编写。

对于像这样的VC

代码语言:javascript
复制
#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;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16388313

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档