我真搞不清楚下面的代码的结果: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,未经初始化。这怎么发生的?
当您使用未初始化的变量时,您会立即被转移到'未定义行为'的领域。不知道会发生什么。 – uptoNoGood
为什么8出乎意料?未初始化的变量允许包含任何值,或者更糟的是,当您尝试访问它时会崩溃。 – immibis
我只是想知道'm'是否是3,因为3在'1(4,3)'中传递。我预计'm'是一些随机值。 – zhuhan