对3D阵列求和

时间:2019-02-04 19:02:04

标签: c arrays

我正在尝试编写一个将3维数组的元素求和的函数。我没有收到任何错误,但是生成的数字比应该的大得多。有什么想法我可能出错了吗?

#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);
}

1 个答案:

答案 0 :(得分:1)

总是,并且我的意思是总是在使用变量之前先对其进行初始化:

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;
}

不初始化值就像对编译器说“我真的不在乎起始值是什么”,因此当您添加到该值时它最终会产生垃圾数据。

将变量的定义移到尽可能靠近它的使用位置也是一个好主意,这样就可以清楚地知道变量的类型。因为您可以声明在循环内部的循环中使用的变量,所以在需要使用该变量的情况下是个好地方,除非您需要在循环外部使用它。