我在第4页找到了这段代码.本书的第 127位作者说它打印了42.但是当我尝试这个时它打印出一些垃圾值.为什么会这样?
#include <stdio.h>
void foo()
{
int a ;
printf("%d \n", a);
}
void bar()
{
int a = 42;
}
int main()
{
bar();
foo();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
ain foo()未初始化,因此它是未定义的行为.
但是,在实践中,一些编译器实际上会输出42(特别是如果关闭优化).那是因为在调用之后bar(),该值42保留在堆栈中.在里面foo(),未初始化a得到它.同样,它是未定义的行为,所以任何事情都可能发生,只是不要这样做.
| 归档时间: |
|
| 查看次数: |
95 次 |
| 最近记录: |