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