c - 将可变大小的多维数组传递给 C 中的函数

标签 c arrays multidimensional-array

我必须将一个浮点值二维数组传递给几个函数,我这辈子都弄不明白。这是我声明它们的地方,也是我在编译时遇到错误的地方。

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

每次我编译都会出错,我只想在我失去它之前完成这个任务。

最佳答案

C 编程语言并没有真正的多维数组,但是有几种方法可以模拟它们。将此类数组传递给函数的方式取决于用于模拟多维的方式。我认为您想使用 Dynamically Allocated VLA。看这个link了解更多信息。

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;
    }
  }
}

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

关于c - 将可变大小的多维数组传递给 C 中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58552127/

相关文章:

只有类型 union 才能解决 C 中这种类型的数组数据声明吗?

python - python 中的字典数组检查

c++ - 返回对动态生成的二维数组的引用

c - 在 C 中使用动态分配将文件读入多维数组

c - Windows 上的 GCC : Set "Description" field of C executable?

c - 包含 gcc 的链接器选项

javascript - Meteor:如何将项目推送到用户集合并创建列表或数组,而不是用新项目替换每个项目?

使用函数为矩阵赋值时 C 程序崩溃

python - pybind11 中是否可以使用 py::cast 访问抽象基类?

c++ - 在 64 位 debian 上编译 GCC 的 CodeViz 补丁