我在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;
}
输出:
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中运行的方式吗? 为什么array
中的最后2个值会回到'0'那么?!
答案 0 :(得分:8)
Filter
尚未初始化,并且未在文件范围内定义,因此其值不确定。您稍后将值分配给数组的某些元素,但这与初始化不同。
然后打印完整数组时,会打印这些不确定的值。至于为什么这些值中的一些是0,因为所有未分配的值都是不确定的,0与任何其他值一样好。另请注意,不确定值可能是陷阱表示,这意味着它不是该数据类型的有效表示形式。如果尝试读取陷阱表示,则调用未定义的行为。
相反,array
已初始化。您为数组的前6个元素赋值,其余元素初始化为0。
答案 1 :(得分:-1)
注意:array1是问题所在。 array2只是另一个测试人员,似乎工作正常。这只是内存在C中运行的方式吗?为什么array1中的最后2个值回到'0'那么?!
这是未定义的行为,您的程序可以随意执行任何操作。
答案 2 :(得分:-1)
C99 Section 6.7.8 Initializers
1671 如果括号括起的列表中的初始值设定项少于 有聚合的元素或成员,或者有更少的字符 用于初始化已知大小的数组的字符串文字 是数组中的元素,聚合的其余部分应为 隐式初始化与具有静态存储的对象相同 持续时间。
默认情况下static int
0 。这就是array2
落后 0 的原因。