【发布时间】:2020-04-27 11:12:37
【问题描述】:
如您所知,在 C 函数声明中,您必须命名除数组参数之一之外的所有维度大小。我现在正在使用一个二维数组,其中两个大小都是在运行时生成的,但是我想将该数组传递给另一个函数来填充它。
我的想法只是在函数声明中使用最大大小,如下所示:
int max_size = 100;
int actual_size;
int another_size;
static void fill_array(int ar[][max_size])
{
for(int i = 0; i < another_size; i++)
{
for(int j = 0; j < actual_size; j++)
{
ar[i][j] = some int;
}
}
}
static void main()
{
if(some_input) actual_size = 50;
else actual_size = 100;
if(some_input) another_size = 10;
else another_size = 20;
int empty_array[another_size][actual_size] = {0};
fill_array(empty_array);
}
我的想法是,即使函数可能认为每个数组行有 100 个整数,我们也只是填充了前 50 个整数。这是笨手笨脚吗?有什么方法可以实现同样的更清洁?对 C 来说很新,如果这是一个非常明显的事情,很抱歉。
【问题讨论】:
-
这很“不聪明”,因为为此目的使用全局变量并不是一个好习惯。只需将尺寸作为参数传递给函数。
-
将 VLA 的维度作为函数参数传递。或者使用一维数组并自己计算索引。
-
这能回答你的问题吗? Ways to pass 2D Array to function in C
-
这只是其中之一。请在 Stackoverflow 中搜索“将 2d 数组传递给函数”,您将获得比您阅读更多的点击量。
标签: c arrays multidimensional-array variable-length-array