通过C中的数组迭代

时间:2015-12-03 21:03:45

标签: c arrays loops

我的代码如下所示:

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");

执行时,它会一直显示这种输出: enter image description here

为了让它只显示我输入的元素(前五个; 0 2 4 6 8)我必须使用一个计数器或有没有办法告诉它只显示那些元素?

为什么元素5,6,7和9总是相同但第8次每次都在变化?我重写了程序来改变它显示元素的方式,它也是一样的:它显示了我输入的五个元素,然后是三个始终保持不变的元素,然后是每次执行程序时更改的元素,然后是最后一个常量元素。这是为什么?

2 个答案:

答案 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)