C代码中的意外输出

时间:2016-07-12 14:16:35

标签: c for-loop scope initialization declaration

以下代码打印AA

#include <stdio.h>
int main()
{
    for(int i;i;i--)
        printf("A");
    return 0;
}

为什么变量i的初始值为2,而不是某些垃圾值?

变量i的生命周期是静态的还是自动的?

2 个答案:

答案 0 :(得分:2)

显然,变量i未初始化。这意味着实现的行为未定义。 i的值仅为垃圾值。这是2

答案 1 :(得分:1)

变量i的范围是整个for语句(包括其主体)。它具有自动存储持续时间,并在退出循环后将被销毁。您不能将其声明为具有静态存储持续时间,例如

for(static int i;i;i--)
    printf("A");

由于变量i未初始化,因此它具有可以作为陷阱值的固定值。