【发布时间】:2014-01-09 13:26:53
【问题描述】:
有没有办法将二维数组传递给一个大小由输入定义的函数,如下所示:
scanf("%d",&n);
matrix[n][n];
?
我不想对函数的第二个参数使用定义。
【问题讨论】:
-
如果您向我们展示函数声明,那么我们很容易告诉您如何将二维数组传递给您的函数。
有没有办法将二维数组传递给一个大小由输入定义的函数,如下所示:
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>。-std=c99 或 -std=c11 请求 C 1999 或 C 2011。有关其他选项,请参阅 GCC documentation。如果数组很大,可以这样定义:
ElementType (*matrix)[n] = malloc(n * sizeof *matrix);
if (!matrix)
Handle error.
然后你必须释放它:
free(matrix);
如果您的 C 实现不支持可变长度数组,那么您可以为 n*n 元素分配空间并手动索引数组(行 i 和列 j 的元素将位于位置 @987654339 @),可能通过编写一些辅助函数来帮助索引。在这种情况下,您可以将数组作为指向元素类型的简单指针而不是指向元素数组的指针传递给函数。
【讨论】:
使用 C99 的variable length array 功能。然后根据函数的参数及其大小将其传递给您的函数。
【讨论】: