我正在C中玩一些基础知识.我有一个数组,我在位置0,1,2,3,4,5填充一个基本的for循环.问题是:当我尝试将其打印出来时,它会在我从未打算触摸的位置打印出奇怪的值(位置6-13).
代码:
#include <stdio.h>
#define MAXSIZE 16
int main()
{
int array[MAXSIZE];
int array2[MAXSIZE] = {0, 1, 2, 3, 4, 5};
int i;
for(i = 0; i < 6; i++)
{
array[i] = i;
}
for( i = 0; i < sizeof(array) / sizeof(int); i++)
//for( i = 0; i < 10; i++ )
{
printf("%d", array[i]);
}
printf("\n");
for(i = 0; i < sizeof(array2) / sizeof(int); i++)
{
printf("%d", array2[i]);
}
// printf("%lf\n", array[2]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
OUTPUT:
0 1 2 3 4 5 822123896 32766 810140152 32643 816205824 32643 816288200 32643 0 0
0 1 2 3 4 5 0 0 0 0 0 0 0 0 0 0
注意:array是问题所在.array2只是另一个似乎正常工作的测试人员.这只是内存在C中运行的方式吗?为什么最后2个值array会回到'0'那么?!
array尚未初始化,并且未在文件范围定义,因此其值是不确定的.稍后您将值分配给数组的某些元素,但这与初始化不同.
然后,当您打印完整数组时,将打印这些不确定的值.至于为什么这些值中的一些是0,因为所有未分配的值都是不确定的,0与任何其他值一样好.另请注意,不确定值可能是陷阱表示,这意味着它不是该数据类型的有效表示形式.如果尝试读取陷阱表示,则调用未定义的行为.
相比之下,array2 被初始化.您为数组的前6个元素赋值,其余元素初始化为0.