【发布时间】:2017-03-26 11:20:26
【问题描述】:
例如,我想将一个二维整数数组传递给 C 中的一个函数。该函数是否应该定义为
void foo(int**,int m,int n);
或
void foo(int[][],int m,int n);
我在第一个原型声明中收到错误,但在使用 GCC 编译时收到警告“指针类型不兼容”。请解释如何传递二维数组。主要方法如给定
int main()
{
int m,n;
scanf("%d%d",&m,&n);
int a[m][n];
foo(a,m,n);
return 0;
}
【问题讨论】:
-
指针不是数组,数组也不是指针。阅读此stackoverflow.com/questions/42094465/…
-
使用常见的布尔逻辑对“函数应该定义为 X 还是 Y”的问题的答案是“否”。二维数组都不正确。
-
... 在你的情况下什么是正确的很大程度上取决于你用什么来调用这个函数。
-
第一个是合法的C;第二个是不是。你 传递 给前者(我怀疑你从中得到警告的那个)很重要,并且不方便地包含在你的问题中。传递 real 二维数组(数组的数组)需要所有维度,但在形成函数的形式参数时需要知道最高级的维度,无论是通过常量还是通过可变长度数组 (VLA)语义。
-
@AdvaithHL 不,它不是那样工作的。您是需要首先在此处提供代码的人。您说您有代码并且发出警告或编译时错误,那么您有责任提供MCVE。