将3D数组作为参数传递给C中的函数

我试图编写一个对3d数组的元素求和的函数,但是它一直说我将3d数组作为参数传递的行存在问题。 我的代码如下:

#include  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. 您不能省略类型
  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)或手动展平数组, 看一看 。