【发布时间】:2018-02-15 16:38:23
【问题描述】:
#include<iostream>
using namespace std;
void fun(int a) {
int x;
cout << x << endl;
x = a;
}
int main() {
fun(12);
fun(1);
return 0;
}
这段代码的输出如下:
178293 //garbage value
12
为什么我们得到12 而不是垃圾值??
【问题讨论】:
-
那些玩弄未初始化变量和未定义行为的人注定要受苦。
-
当你
cout<<x<<endl;时x的值是多少?? (也许将x=a;移到函数顶部??) -
12是一个垃圾值(其中之一) -
这是未定义的行为。第二次的垃圾值恰好是 12。
-
12与任何其他值一样垃圾。在两者之间调用另一个使用堆栈的函数,您可能会看到其他内容。仅仅因为它是您所期望的,并不意味着它是正确的