为什么C中局部变量的默认值相同?

use*_*783 -3 c local-variables

#include <stdio.h>  
int main()
{
    int i,j=3;
    i=4+2*j/i-1;
    printf("%d",i);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它会每次打印9,虽然我没有初始化,所以,它必须打印任何垃圾值.请解释...

The*_*kis 9

C中未初始化的局部变量的值是不确定的,读取它可以调用未定义的行为.

现在,在特定环境中重复执行使用特定编译器编译的特定程序(正如您所做的那样)可能会产生相同的(当然仍未定义)行为.这可能是因为操作系统会在每次运行它,因此,你的程序读取垃圾有被每次都在同一个很好的机会(但它仍然是垃圾,不过)时间通常给你的过程相同范围的逻辑记忆.或者可能是因为编译器甚至懒得给你一个你将要阅读的垃圾的二进制表示,而是给你一些别的东西(只要它不违反标准).