有没有办法将二维数组传递给一个函数,该函数的大小由如下输入定义:
scanf("%d",&n);
matrix[n][n];
我不想对函数的第二个参数使用define。
答案 0 :(得分:1)
在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
的元素可能是通过编写一些辅助函数来帮助编制索引,位于i*n+j
位置。在这种情况下,您将数组作为指向元素类型的简单指针传递给函数,而不是指向元素数组的指针。
答案 1 :(得分:0)
使用C99的variable length array功能。然后根据函数的参数及其大小将其传递给函数。