【问题标题】:Passing a two dimensional array to a function [closed]将二维数组传递给函数[关闭]
【发布时间】:2014-01-09 13:26:53
【问题描述】:

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

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

?

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

【问题讨论】:

  • 如果您向我们展示函数声明,那么我们很容易告诉您如何将二维数组传递给您的函数。

标签: c arrays function matrix


【解决方案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 的元素将位于位置 @987654339 @),可能通过编写一些辅助函数来帮助索引。在这种情况下,您可以将数组作为指向元素类型的简单指针而不是指向元素数组的指针传递给函数。

【讨论】:

    【解决方案2】:

    使用 C99 的variable length array 功能。然后根据函数的参数及其大小将其传递给您的函数。

    【讨论】:

    • 我的怀疑:另一位候选人不知道可以将 VLA 传递给函数,因此对任何断言它可能的(正确)答案投了反对票... >.
    • @H2CO3; :(((。同意。
    • 同时,这个问题(没有显示出研究成果,而且是琐碎和懒惰的)已被投票。一定要喜欢这个系统。
    • @H2CO3;我没有投票!相信我。
    • 我知道你永远不会那样做,我只是想强调这一切的怪异......
    猜你喜欢
    • 2011-03-12
    • 2020-11-01
    相关资源
    最近更新 更多