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

C++中未显式初始化的变量为何会出现非0的意外初始值?

问题原因解释

  • 你对C变量初始化规则存在认知误区:仅静态存储期的变量(全局变量、被static修饰的局部变量)会被默认零初始化,而你代码中定义在main函数内的final_sum、sum都属于自动存储期的局部变量,存储在栈内存中,C标准并未规定这类变量会被自动初始化,它们的初始值是对应内存地址之前残留的任意脏数据,你看到的初始值16只是当前运行环境下栈内存的遗留值,完全不具备确定性,换设备、换编译器甚至同环境多次运行都可能得到不同的结果,这类未初始化就读取的行为属于典型的未定义行为。
  • 你代码中还存在另一处同类问题:sum变量同样未初始化就直接执行sum += i操作,也会导致计算结果异常。

修复方案

在定义变量时显式指定初始值即可,修改后的代码如下:

#include <iostream>
#include <iomanip>
#include <cmath>

using namespace std;

int main()
{
    // 所有变量显式初始化
    int n = 0, sum = 0, final_sum = 0;

    cout<<"ff: "<<final_sum<<endl;
    cout<<"Input the value for n: ";
    cin>>n;

    for(int i=1; i<=n; i++){
        sum += i;
        final_sum += sum;
        cout<<"sum: "<<sum<<endl;
        cout<<"final sum: "<<final_sum<<endl<<endl;
    }
    return 0;
}

内容的提问来源于stack exchange,提问作者soup

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 06:45:02