我正在学习用C ++编写代码。我遇到了一个问题,需要创建一个函数来添加非常大的数字并返回总和。我看到了一种神秘的行为。当我在返回值之前在函数veryBigSum
内打印数字aVeryBigSum
时,它可以正常工作。
#include <bits/stdc++.h>
#include <vector>
using namespace std;
long long aVeryBigSum(int n, vector <long long> ar) {
long long veryBigSum;
for(vector<long long>::iterator it = ar.begin(); it != ar.end(); ++it )
veryBigSum += *it;
cout << veryBigSum << "\n";
return veryBigSum;
}
int main() {
int n;
cin >> n;
vector<long long> ar(n);
for(int ar_i = 0; ar_i < n; ar_i++){
cin >> ar[ar_i];
}
long long result = aVeryBigSum(n, ar);
cout << result << endl;
return 0;
}
上述输入是:
5
1000000001 1000000002 1000000003 1000000004 1000000005
以上输出为:
5000000015
5000000015
但是当我不在aVeryBigSum
函数中打印数字时,cout
内的main
语句会显示一些垃圾值。
#include <bits/stdc++.h>
#include <vector>
using namespace std;
long long aVeryBigSum(int n, vector <long long> ar) {
long long veryBigSum;
for(vector<long long>::iterator it = ar.begin(); it != ar.end(); ++it )
veryBigSum += *it;
return veryBigSum;
}
int main() {
int n;
cin >> n;
vector<long long> ar(n);
for(int ar_i = 0; ar_i < n; ar_i++){
cin >> ar[ar_i];
}
long long result = aVeryBigSum(n, ar);
cout << result << endl;
return 0;
}
上述输入是:
5
1000000001 1000000002 1000000003 1000000004 1000000005
以上输出为:
5004197743
有人可以向我解释为什么会这样吗?我的意思是,打印值如何影响变量在函数之间的传递?
答案 0 :(得分:2)
您需要初始化累加器:
long long veryBigSum = 0;
只是偶然(未定义的行为),你有时会得到正确的答案。