为什么两段C语言加法代码分别输出垃圾值和正确计算结果?
问题原因分析
- 核心问题出在代码执行顺序和C语言的局部变量初始化规则两个点上:
局部变量的默认值规则
在C语言中,定义在函数内部的非静态局部变量(你代码里的a、b、sum都属于这类)不会被自动初始化,它们的初始值是对应内存地址里残留的随机数据,也就是常说的「垃圾值」,未赋值就直接使用属于未定义行为。
第一段代码的执行逻辑问题
int main(){ int a, b, sum; sum = a+b; // 此时a、b还未赋值,用垃圾值计算得到sum也是垃圾值 scanf("%d%d",&a,&b); // 这里才给a、b赋值,但sum已经计算完成不会同步更新 printf("addition is %d", sum); // 打印的是之前的垃圾sum return 0; }
第二段代码的正确逻辑
int main(){ int a, b, sum; scanf("%d%d",&a,&b); // 先给a、b写入用户输入的有效值 sum = a+b; // 用有效值计算得到正确的sum printf("addition is %d", sum); // 打印正确结果 return 0; }
内容的提问来源于stack exchange,提问作者Harshit
相关产品推荐
相关产品推荐

