我正在编写一个采用2D数组并使用开关盒的程序,您可以指示它填充随机数和/或打印数组等。
在我用随机数填充数组之前,我去打印数组只是为了看看它会做什么,我得到了这个:
176185448 1 1 01430232144
32767180624652332767143023216832767
143023216832767 0 11430232192
32767176185344 1 0 14
143023220832767 0 0 0
0 0 0 0 0
这是我的打印数组函数的代码,我从main传递plist:
void PrintArray2D(int plist[M][N])
{
size_t row, column; //counter
for (row = 0; row < M; ++row)
{
for (column = 0; column < N; ++column)
{
printf ("%5d" , plist[row][column]);
}
printf ("\n");
}
}
我的计划工作正常。当我填写随机数然后打印时,我的输出是正确的。数组大小是6乘5.我只是好奇为什么,当它应该是一个空数组时,任何东西都被打印出来。对于我得到的具体输出更加好奇。
答案 0 :(得分:2)
您正在打印未初始化数组的值。在这种情况下,程序的行为是未定义。你可能得到任何预期的或意外的结果。
您获得的值可能是存储在该位置的某个先前值(称为垃圾值)。您的程序可能会产生错误的结果。
答案 1 :(得分:2)
你是在初始化阵列吗?
如果没有,你很可能事先得到记忆中的遗体。
要快速将其初始化为全零,无论它在何处定义都具有类似
的内容int list[M][N] = {0};
只是一个警告,零并不意味着将所有值设置为0.它将第一个元素设置为花括号的内容。所以:
int values[M] = {1,2,3};
将前三个数字设置为1,2和3,其余为零。
答案 2 :(得分:2)
必须初始化C中的变量。如果你没有初始化一个变量(比如一个数组),它就会包含一些非逻辑数字(比如一个内存单元的地址 - 之前在那个内存位置的值) 你打印的东西就是那个!你不能在像Java这样的语言中这样做,如果你这样做,就会出现编译错误。 我希望这有帮助