本文介绍了将 3D 数组作为参数传递给 C 中的函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

Im trying to write a function that sums the elements of a 3d array, however it keeps saying there is a problem with the lines where I pass the 3d array as a parameter. My code is as follows:

#include <stdio.h>

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

main() {
    int check[3][3][3]={ 0 };
    int size=3;
    printf("The sum is %d
",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
", sum);
                }
            }
        }
return(sum);
}

编译器将第 3 行和第 11 行标记为问题.任何人都可以帮忙吗?

The compiler flags lines 3 and 11 as problems. Can anyone help?

推荐答案

  1. 不能省略类型
  2. 您只能省略数组的第一维
int sum3darray(a[][][], size);

应该是

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

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

正如@CoolGuy 所指出的,您可以省略原型中的参数名称:

As pointed out by @CoolGuy, you can omit the name of the parameters in prototypes:

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

可以写成

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

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

Another way to deal with multidimensional arrays (if you don't know the sizes beforehand) is using VLA's (thank you M Oehm) or flattening the array manually, take a look.

这篇关于将 3D 数组作为参数传递给 C 中的函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-06 03:15