c - 将二维数组传递给函数

标签 c arrays function matrix

有没有办法将二维数组传递给函数,其大小由输入定义,如下所示:

scanf("%d",&n);
matrix[n][n];

我不想对函数的第二个参数使用定义。

最佳答案

在支持可变长度数组的 C 1999 实现和 C 2011 实现中,您可以通过以下方式声明函数来传递具有运行时维度的数组:

ReturnType foo(size_t n, ElementType matrix[][n]) …

在调用代码中,获取n后,您可以使用以下方式定义矩阵:

ElementType matrix[n][n];

您可以使用以下方式调用该函数:

foo(n, matrix)

注释:

  • ReturnTypeElementType是您选择的类型的占位符。 ReturnType可能是void .
  • 获取 size_t 的定义,你应该#include <stddef.h> .
  • 您应该以这种方式仅定义小数组。大多数 C 实现只为具有自动存储期限的可变长度数组提供有限的空间,如果数组太大,就会导致堆栈溢出。
  • 如果使用 GCC 编译,可以使用 -std=c99 请求 C 1999 或 C 2011或-std=c11 。请参阅GCC documentation了解更多选项。

如果数组很大,可以这样定义:

ElementType (*matrix)[n] = malloc(n * sizeof *matrix);
if (!matrix)
    Handle error.

稍后您必须使用以下命令释放它:

free(matrix);

如果您的 C 实现不支持可变长度数组,那么您可以为 n*n 分配空间。元素代替并手动索引数组(行 i 和列 j 的元素将位于位置 i*n+j ),可能通过编写一些辅助函数来帮助索引。在这种情况下,您可以将数组作为指向元素类型的简单指针传递给函数,而不是指向元素数组的指针。

关于c - 将二维数组传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21021562/

相关文章:

php - 将php数组数据导出到excel

c++ - 我在使用 bool 函数时遇到问题,用户输入两个字母并输出哪个字母在字母表中最高

c++ - 发现 char* 参数大小

c - 如何链接多个管道? (加上奇怪的 bug )

c - 我需要将数据从文件 "MusicLibrary.txt"复制到结构中。但是当我使用我的代码时,它不会返回任何东西

c - 在C中的双链表中添加 child

python - numpy 中的多维 bool 数组索引

c - 按位运算设置十进制变量

arrays - Firestore 在更新数组时不存储两个相同的值

excel - 如何将Excel函数分隔符 ";"更改为 ","?