C:未初始化的局部变量具有意外值

时间:2016-12-15 04:08:30

标签: c

我对以下代码的结果感到困惑:

#include <stdio.h>
#include <stdlib.h>

int one(int a, int b) {
    int k, t;
    k = a - b;
    t = a + b + 1;
    if (k % 2 == 0) return t;
    else return 0;
}

int two(int x, int y) {
    int m;
    printf("%d\n", m);
    return m + x + y;
}

main() {
    int result = two(5, one(4, 3));
    // printf("%d\n", one(4, 3));
    printf("result is %d\n", result);
}

one(4, 3)返回0,这并不奇怪。但是我不明白为什么two(5, 0)会返回8.换句话说,m在没有初始化的情况下取值3。这是怎么发生的?

1 个答案:

答案 0 :(得分:1)

在定义值时,C不会自动将值初始化为0。从技术上讲,在初始化之前读取数据是未定义的行为。实际上,这通常会导致垃圾值包含先前存储在该位置的任何数据。