"dataset":"krs_podmioty"
为什么在第二次调用func()时打印24,变量y必须死?为什么它表现得像静态变量,即使它尚未声明?
答案 0 :(得分:4)
未定义的行为,因为未初始化的局部变量。
如果您在为其分配了值之前使用了自动存储变量,那么该存储可以保存之前保存的任何内容,因此该变量的内容将是不可预测的。
C标准是6.3.2.1 p2:
如果左值指定一个自动存储持续时间的对象 可以用寄存器存储类声明(从来没有 它的地址),并且该对象未初始化(未声明 使用初始化程序并且之前未执行任何赋值 使用),行为未定义。
所以,如果你在创建之后初始化变量,那就更好了,比如:
void func()
{
int y = 0;
^^^
y=y+2;
printf("%d",y);
}
答案 1 :(得分:0)
程序具有未定义的行为,因为在函数y
中使用了未初始化的变量func
。
void func()
{
int y;
^^^^^^
y=y+2; // using an uninitialized variable
printf("%d",y);
}
至于问题,那么函数可以使用未被其他函数覆盖的相同内存。因此,存储在内存中的值在函数调用之间可以是相同的。