我的代码如下所示:
void main()
{
int vect[10], i;
for (i=0; i<5; i++)
vect[i] = i*2;
printf("Vector: ");
for (i=0; i<10; i++)
printf("%d ", vect[i]);
printf("\n");
为了让它只显示我输入的元素(前五个; 0 2 4 6 8)我必须使用一个计数器或有没有办法告诉它只显示那些元素?
为什么元素5,6,7和9总是相同但第8次每次都在变化?我重写了程序来改变它显示元素的方式,它也是一样的:它显示了我输入的五个元素,然后是三个始终保持不变的元素,然后是每次执行程序时更改的元素,然后是最后一个常量元素。这是为什么?
答案 0 :(得分:8)
int vect[10]
索引5-9未初始化 - 您需要为它们分配一些东西,否则它们(可能)会返回垃圾,因为这是未定义的行为(C99 standard, section 5.1.2 "Execution environments")。您还可以将vect
定义为静态,即static int vect[10]
,因为静态变量将自动初始化为0,而静态int数组将自动初始化为0。
答案 1 :(得分:2)
在您的代码中,vect
是一个自动本地数组,在定义时不会显式初始化。因此,在那时,所有元素值都是不确定的。
引用C11
,章节§6.7.9
如果没有显式初始化具有自动存储持续时间的对象,则其值为 不确定的。[...]
在第一个for循环中,您只初始化了5个元素,其余元素未初始化且包含不确定的值。
尝试读取不确定的值会调用undefined behavior。
相关,附件J,相同标准,用于未定义的行为
使用具有自动存储持续时间的对象的值 不确定的。
一旦你的节目展示了UB,就没有任何保证。
FWIW,void main()
至少应为int main(void)
。