#include<stdio.h>
void bar()
{
int a=4;
}
void foo()
{
int a;
printf("%d",a);
}
int main()
{
bar();
foo();
}
我确信上面的程序将输出作为一些垃圾值(这就是我编译和运行时发生的情况)。但我在一篇文章中读到,某些编译器可能会将输出本身指定为 4。给出的解释是,它与激活堆栈和激活帧有关。我不明白。是不是像 bar() 函数中的 int a=4 的值存储在激活堆栈中的某个位置以供将来使用?我很困惑!
最佳答案
不必担心某些编译器可能会做什么。这称为“未定义的行为”。始终确保将变量初始化为您想要的任何值。
再说一遍,尝试“理解”是没有意义的,因为没有逻辑,而且它肯定不是“预期的行为”。但是,可以想象,如果函数是内联的,某些编译器会重用 cpu 上的寄存器,所以是的,这种情况可能会发生。如果您担心有人在您之后运行函数并“窃取您的值”,那么只需在退出函数之前将其设置为零即可。但这不是“最佳实践”。
换句话说,即使第二个函数使用“b”而不是 a,如果它们重用内存空间,它也可能有 4。或者其他一些编译器实际上可能按字母顺序预分配,因此只有“a”可以工作。同样,这是未定义的行为。
关于c - 一个函数中的局部变量的值在另一个函数中使用(C 编程),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19549528/