以下代码中的输出真的很神秘。
#include <stdio.h>
void funktion(int x) {}
void test() {
int foo;
printf("test = %d\n", foo);
}
int main() {
test();
funktion(5);
test();
return 0;
}
为什么foo-var会使用funktion()参数的值初始化?我不明白为什么foo-var由function-parameter初始化。我知道我可以通过明确的初始化来修复它 - 但我想了解这个谜。谢谢!
答案 0 :(得分:2)
我在您的main()
函数中添加了注释,解释了原因。顺便说一下,你处于未定义的行为领域,不同的平台可能产生不同的结果。
int main() {
// no return, no parameter, one local variable of type int.
// This pushes an int on the stack, uninitialized (the local variable).
test();
// Stack pointer is back to where it was.
// no return, one int parameter, no local variables.
// This pushes an int with value=5 on the stack (the parameter).
funktion(5);
// Stack pointer is back to where it was.
// no return, no parameter, one local variable of type int.
// This pushes an int on the stack, uninitialized (the local variable).
// Previous value of that memory comes from funktion() call.
test();
// Stack pointer is back to where it was.
return 0;
}