在汇总Long Long整数数组时传递的垃圾值

时间:2017-12-15 06:47:16

标签: c++

我正在学习用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

有人可以向我解释为什么会这样吗?我的意思是,打印值如何影响变量在函数之间的传递?

1 个答案:

答案 0 :(得分:2)

您需要初始化累加器:

long long veryBigSum = 0;

只是偶然(未定义的行为),你有时会得到正确的答案。