C 代码中的意外输出

Unexpected output in C code

以下代码打印 AA:

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

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

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

显然变量i没有被初始化。这意味着实现的行为是未定义的。 i 的值只是垃圾值。这是 2.

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

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

由于变量 i 未初始化,它有一个不确定的值,可能是一个陷阱值。