有没有办法将二维数组传递给函数,其大小由输入定义,如下所示:
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)
注释:
-
ReturnType
和ElementType
是您选择的类型的占位符。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/