我对以下代码的结果感到困惑:
#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。这是怎么发生的?
答案 0 :(得分:1)
在定义值时,C不会自动将值初始化为0
。从技术上讲,在初始化之前读取数据是未定义的行为。实际上,这通常会导致垃圾值包含先前存储在该位置的任何数据。