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

C++中main()内外声明int变量为何结果不同?输入12出现差异

两段C++代码结果差异的原因分析

当输入12时,第一段在main()外声明变量的程序返回预期值4,第二段在main()内声明变量的程序无法得到正确结果,差异原因如下:

第一段代码

#include <iostream>
using namespace std;

int n, d, nr;

int main()
{
    cin >> n;
    
    for(d = 1; d * d < n; d++){
        if (n % d == 0){
            if (d % 2 == 0) nr++;
            if (n / d % 2 == 0) nr++;
        }
    }
    if (d * d == n && d % 2 == 0) nr++;
    
    cout << nr;
}

第二段代码

#include <iostream>
using namespace std;

int main()
{
    int n, d, nr;
    cin >> n;
    
    for(d = 1; d * d < n; d++){
        if (n % d == 0){
            if (d % 2 == 0) nr++;
            if (n / d % 2 == 0) nr++;
        }
    }
    if (d * d == n && d % 2 == 0) nr++;
    
    cout << nr;
}

差异原因

核心问题出在变量初始化规则上:

  • 第一段里的n、d、nr是全局变量,C++规定全局变量会被自动初始化为0。所以统计偶数因数的nr从0开始累加,最终能正确算出12的4个偶数因数(2、4、6、12)。
  • 第二段里的n、d、nr是main函数内的局部变量,局部变量不会自动初始化,初始值是内存里的随机垃圾值。nr从随机值开始累加,输出结果自然不是预期的4。

只要在第二段代码里把nr显式初始化为0,比如写成int n, d, nr = 0;,就能得到正确结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 14:05:47