在C语言中将大小变化的多维数组传递给函数

3

我必须将一个浮点值的二维数组传递给几个函数,但是我无法想出正确的方法。这是我声明它们以及在编译时出错的地方。

void displayData (int, int, float[][]);
void hasValue (int, int, float[][]);
void countValues(int, int, float[][]);

每次编译时都会出错,我只想在失去作业之前完成它。


3
请查看以下两个链接,了解如何在C和C++中将2D数组(矩阵)传递给函数和如何将多维数组传递给函数: - Inian
1
还有,哪些错误? - Tanveer Badar
错误:数组类型具有不完整的元素类型“float []” void displayData(int,int,float [] []); 并且此错误对所有函数都重复出现 - Noah Howren
1个回答

4

C编程语言实际上没有真正的多维数组,但有几种方法可以模拟它们。将这样的数组传递给函数的方式取决于用于模拟多个维度的方式。我认为您想使用动态分配VLA。请参阅此链接以获取更多信息。

C(和C++)中,您的二维数组数据将按行优先顺序Row-Major Order)存储,并且必须知道一行的长度才能得到下一行的正确内存偏移量。因此,第一个下标仅在声明数组时指示所需的存储量,但在计算偏移量之后不再需要。因此,您可以将第一个下标留空,并在函数声明和定义中提供其余子脚注。

例如,如果您的数组列大小为4,则:

void displayData (int, int, float[][4]);
void hasValue (int, int, float[][4]);
void countValues(int, int, float[][4]);

编辑:

您可以使用以下功能来实现您想要的目标:

void my_function(int rows, int cols, int array[rows][cols])
{
  int i, j;
  for (i = 0; i < rows; i++) {
    for (j = 0; j < cols; j++) {
      array[i][j] = i*j;
    }
  }
}

你需要确保将正确大小的数组传递给你的函数。


但问题是,数组的每个维度的大小根据用户输入而变化。 - Noah Howren
如果你在运行时不知道需要多少内存,就不能使用固定大小的数组。你必须动态分配它或使用VLA。请参见Inian在评论中发布的问题的第一个答案。 - yano

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接