You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么两段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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 10:24:05