#include<stdio.h>
int* foo() {
int a = 5;
return &a;
}
void bar() {
int a = 7;
}
void foobar() {
int a = 97;
}
int main() {
int* p = foo();
bar();
foobar();
printf("%d", *p);
return 0;
}
我无法理解此行为背后的概念。 为什么foobar函数输出的总是局部变量a的值?
最佳答案
你不能这样做:
int* foo() {
int a = 5;
return &a; /* variable "a" is out of scope once "foo()" returns */
}
这是 "undefined behavior" .结果可能因环境而异,编译器与编译器不同,甚至运行不同。但它总是“垃圾”。
关于C程序栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32160269/