【问题标题】:how to pass a 3d array of pointers to a function in c? [duplicate]如何将 3d 指针数组传递给 c 中的函数? [复制]
【发布时间】:2016-06-23 02:27:48
【问题描述】:

我在这种情况下遇到了问题

typedef struct {  
   ...
} str;

str *matrix[SIZE][SIZE][SIZE];

for (i = ...) {
    for (j = ...) {
        for (k = ...) {
            matrix[i][j][k] = (str *)malloc(NUM * sizeof(str));
        }
    }
}

并成功通过

访问此 3D 数组
( (matrix[i][j][k])[n] ) //  in n-th element.

我的问题是,如何在程序的函数中传递这个 3D 指针数组(到 struct str)?

【问题讨论】:

  • 也许answer of mine 可以提供帮助(dup 使用固定维度数组)。注意我试图解释 N 维数组的一般规则。

标签: c arrays function multidimensional-array


【解决方案1】:

你有没有尝试过明显的语法:

访问nth 结构:

matrix[i][j][k][n].member = value;

接收3D矩阵:

void myfunc(str *a[SIZE][SIZE][SIZE]) {
    ...
    a[i][j][k][n].member = value;
    ...
}

注意第一个SIZE被忽略,数组在传递给函数时衰减为指针,函数参数可以定义为str *a[][SIZE][SIZE]str *(*a)[SIZE][SIZE],语义完全相同。

通过它:

myfunc(matrix);

【讨论】:

  • 谢谢你,你的帮助很简单很好:)
【解决方案2】:

我的问题是,如何在我的程序的函数中传递这个 3d 指针数组(到 struct str)?

函数的参数类型需要是

str *matrix[SIZE][SIZE][SIZE]

str *matrix[][SIZE][SIZE]

str * (*matrix)[SIZE][SIZE]

例子:

#define SIZE 10

typedef struct s str;

void foo(str* m[SIZE][SIZE][SIZE])
{
}

void bar(str* m[][SIZE][SIZE])
{
}

void baz(str* (*m)[SIZE][SIZE])
{
}

int main()
{
   str* m[SIZE][SIZE][SIZE];
   foo(m);
   bar(m);
   baz(m);
}

【讨论】:

  • 谢谢你,你的帮助很简单很好:)
猜你喜欢
  • 2017-06-29
  • 2021-12-31
  • 1970-01-01
  • 1970-01-01
  • 2017-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多