C - 整数变量的假值

时间:2018-03-19 17:39:34

标签: c

以下代码中的输出真的很神秘。

#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初始化。我知道我可以通过明确的初始化来修复它 - 但我想了解这个谜。谢谢!

1 个答案:

答案 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;
}