【发布时间】:2019-04-15 17:29:49
【问题描述】:
如下代码
#include <stdio.h>
void f() {
int x;
printf("x = %d\n", x);
}
void g() {
int y = 42;
printf("y = %d\n", y);
}
int main() {
f();
g();
return 0;
}
我得到以下输出
x = 22031
y = 42
如果我更改main() 中执行的最后两个函数的顺序并运行代码
void f() {
int x;
printf("x = %d\n", x);
}
void g() {
int y = 42;
printf("y = %d\n", y);
}
int main() {
g();
f();
return 0;
}
我得到以下信息:
y = 42
x = 42
谁能给我解释一下。我知道这与内存在地址中的分配方式有关,但我不确定细节。
【问题讨论】:
-
很难描述未定义的行为,当您访问未初始化的变量时会遇到这种行为。
-
这些值是未初始化的,因此是不确定的。它们可以是任何东西。没有什么可以“解释”的,因为这完全是编译器的心血来潮。