我正在尝试编写一个将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);
}
答案 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;
}
不初始化值就像对编译器说“我真的不在乎起始值是什么”,因此当您添加到该值时它最终会产生垃圾数据。
将变量的定义移到尽可能靠近它的使用位置也是一个好主意,这样就可以清楚地知道变量的类型。因为您可以声明在循环内部的循环中使用的变量,所以在需要使用该变量的情况下是个好地方,除非您需要在循环外部使用它。