将二维数组传递给函数

时间:2014-01-09 13:26:54

标签: c arrays function matrix

有没有办法将二维数组传递给一个函数,该函数的大小由如下输入定义:

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

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

2 个答案:

答案 0 :(得分:1)

在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-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功能。然后根据函数的参数及其大小将其传递给函数。