我正试图写一个函数来求三维数组元素的和。我没有收到任何错误,但结果比应该的大得多。你知道我哪里出错了吗?

#include <stdio.h>

int sum1(int const arr[][3][3]);

int const table[3][3][3] =
{
    {
    {10, 11, 12},
    {13, 14, 15},
    {16, 17, 18}
    },
    {
    {20, 21, 22},
    {23, 24, 25},
    {26, 27, 28}
    },
    {
    {30, 31, 32},
    {33, 34, 35},
    {36, 37, 38}
    }
};

int sum1(int const arr[][3][3])
{
    int total, i, j, k;

    for(i = 0; i < 3; ++i)
    {
        for(j = 0; j < 3; ++j)
        {
            for(k = 0; k < 3; ++k)
            {
                total += arr[i][j][k];
            }
        }
    }
    printf("Sum is %d\n", total);
    return total;
}

void main()
{
    sum1(table);
}

最佳答案

总是,我的意思是在使用变量之前,总是初始化变量:

int sum1(int const arr[][3][3])
{
    int total = 0;

    for(int i = 0; i < 3; ++i)
    {
        for(int j = 0; j < 3; ++j)
        {
            for(int k = 0; k < 3; ++k)
            {
                total += arr[i][j][k];
            }
        }
    }

    printf("Sum is %d\n", total);
    return total;
}

不初始化一个值就像对编译器说“我真的不在乎起始值是什么”,所以当您添加到该值时,它最终会生成垃圾数据。
最好将变量的定义尽可能靠近它的使用位置,这样就不会对它是什么类型产生歧义。因为可以在循环内声明循环中使用的变量,所以这是一个很好的地方,除非在循环外需要使用它。

关于c - 对3D阵列求和,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54522686/

10-12 16:06