在C语言中将3D数组作为参数传递给函数

5

我正在尝试编写一个函数,用于对3D数组的元素求和,但是它一直报错,说在将3D数组作为参数传递的那些行存在问题。我的代码如下:

#include <stdio.h>

int sum3darray(a[][][], size);

main() {
    int check[3][3][3]={ 0 };
    int size=3;
    printf("The sum is %d\n",sum3darray(check,size));
}

int sum3darray(a[][][],size) {
    int i,j,k,sum=0;
        for(i=0;i<size;i++) {
            for(j=0;j<size;j++) {
                for(k=0;k<size;k++) {
                    printf("i=%d, j=%d,k=%d, checkijk=%d  ",i,j,k,check[i][j][k]);
                    sum+=check[i][j][k];
                    printf("sum=%d\n", sum);
                }
            }
        }
return(sum);
}

编译器将第3行和第11行标记为问题。有人可以帮忙吗?

1
如果您能附上编译器错误,那就太好了。 - tema
1个回答

5
  1. 你不能省略类型
  2. 你只能省略数组的第一个维度

int sum3darray(a[][][], size);

应该是

int sum3darray(int a[][3][3], int size);

或者

int sum3darray(int (*a)[3][3], int size);

正如@CoolGuy所指出的那样,您可以在原型中省略参数的名称:
int sum3darray(int (*a)[3][3], int size);

可以写成

int sum3darray(int (*)[3][3], int);

处理多维数组的另一种方法(如果您事先不知道大小)是使用VLA(感谢M Oehm)或手动扁平化数组,看一看


1
我建议添加“3.您可以省略参数的名称”。 - Spikatrix
2
可能有用的补充说明:从C99开始,当您在数组之前传递大小时,可以拥有可变长度的参数:int sum3darray(int size, int a[size][size][size]) - M Oehm
1
@MOehm:一个可能不太有用的补充:GCC实现了参数的前向声明作为扩展:int sum3darray(int size; int a[size][size][size], int size); - cremno

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接