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
相关产品推荐
相关产品推荐

