【问题标题】: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)?
【问题讨论】:
标签:
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);
}