【发布时间】:2016-04-06 05:26:53
【问题描述】:
(这是后续to this question。)
我试图了解将多维数组传递给 C 中的函数的“最佳实践”(或实际上任何实践)。当然这取决于应用程序,所以让我们考虑编写一个函数来打印二维数组大小可变。特别是,我对如何在以下代码中编写函数 printArry(_____) 感兴趣。
上面引用的问题中的答案使用 C 的可变长度数组 (VLA) 特性。These are not present 在 C98 标准中是可选的,在 C11 标准中是可选的(它们似乎也不能在 C++11 中编译)。
如果不使用 VLA 功能,如何回答这个问题?传递二维数组似乎是一项相当基本的任务,所以我无法想象没有合理的方法。
void printArry(_____){
/* what goes here? */
}
int main(void){
int a1=5;
int b1=6;
int a2=7;
int b2=8;
int arry1[a1][b1];
int arry2[a2][b2];
/* set values in arrays */
printArry(arry1, a1, b1);
printArry(arry2, a2, b2);
return 0;
}
【问题讨论】:
-
对不起,
int arry1[a1][b1];等不是 VLA 吗?有了这些,甚至更多需要将数组维度传递给函数,因为您无法定义类型。 -
@Weather Vane,我不是标准专家,但(例如)c++11 接受 int arry1[a1][b1] 的初始化,但不接受 VLA 在函数定义。我认为在 c98 中也是如此,但我目前无法对其进行测试。
-
@ABD 关于作为函数参数传递的数组的唯一信息是它作为指针的基地址。由于函数无法知道其维度,因此您也必须传递它。
-
在c89中不能写
int arry1[a1][b1];等。
标签: c arrays multidimensional-array