【问题标题】:Passing a 3 dimensional array to a function in C将 3 维数组传递给 C 中的函数
【发布时间】:2014-01-03 21:10:33
【问题描述】:

我试图将一个 3 维数组传递给一个函数。 我得到了数组的这个声明

char cube[N][N][N];

它的大小(N)是一个常数。
我想将它传递给一个函数,这样我就可以在函数中处理数组并更改它,而无需在每次调用时复制整个数组。..

我实际上想传递一个指向数组开头的指针,并能够将一些信息放入函数中的数组中。

感谢您的帮助。

【问题讨论】:

  • 这正是将自动发生的事情:即使您愿意,也不能强制 C 按值传递单个数组 - 它会衰减为指针。如果您想按值传递数组,则必须将数组包装在 struct 中,并改为传递 struct

标签: c function multidimensional-array


【解决方案1】:

嗯,最简单的方法是在函数中将参数声明为char cube[N][N][N];char cube[][N][N];,然后数组将通过指针传递(是的,这违反直觉,但它确实是这样工作的。

【讨论】:

  • 哇.. 这真是违反直觉.. 我确信它会按值复制数组:|
  • 反直觉是为什么你应该使用第二个写作,它暗示了更多关于实际发生的事情。或者,你也可以写成char (*cube)[N][N],因为它实际上是在底层传递的:这种晦涩的语法意味着“指向 2D 数组的指针”(因为 3D 数组只是 2D 数组的数组,我们实际上是在传递一个指向其第一个元素的指针),将其视为char[N][N]* cube,只是语法更奇怪。
【解决方案2】:

将函数的参数声明为char cube[][N][N](可以省略第一个维度的长度)。您也可以将其声明为char (*cube)[N][N](实际上编译器会将char cube[][N][N] 解析为char (*cube)[N][N])。

我实际上想传递一个指向数组开头的指针,并能够将一些信息放入函数中的数组。

现在您的函数需要char (*)[N][N]) 类型的参数,即指向chars 的二维数组的指针。您可以将cube(衰减到第一个元素,即3D 数组的row)或&cube[0](指向3D 数组cube 的第一行的指针)作为参数传递给您的函数。现在,对函数中传递的数组(指向数组的指针)的任何修改都将反映到原始数组中。

建议阅读:这是一个很好的answer 关于二维数组。会有所帮助的。

【讨论】:

    【解决方案3】:

    我想补充以前的答案。

    如果您动态分配该数组,您也可以传递三重指针char ***cube ,但前提是你动态分配它

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-10
      • 2014-01-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多