如何将函数的整数大小与数组的实际大小相关联? C ++

时间:2017-10-14 09:08:09

标签: c++ arrays sum

我正在尝试编写一个计算数组总和的函数,但是当我声明int size = 0时; ,该函数运行0次,因为i = 0;一世

int arraChec(int arra[]) {

    int size = 0;
    int sum = 0;

    for (int i = 0; i < size; i++) {
        sum = sum + arra[i];
    }
    return sum;
}


int main() {

    int arra1[7] = { 2,3,5,7,8,9,1 };

    cout << arraChec(arra1) << endl;

    system("pause");
}

4 个答案:

答案 0 :(得分:1)

你需要向函数传递两个参数 - 数组的开头加上大小,或者开头和(结束时)结束,这在C ++中是常规的:

int arraChec(int* begin, int* end) {
    int sum = 0;
    for (int* it = begin; it < end; ++it) {
        sum += *it;
    }
    return sum;
}

int main() {

    int arra1[7] = { 2,3,5,7,8,9,1 };

    cout << arraChec(std::begin(arra1), std::end(arra1)) << endl;

    system("pause");
}

当然,您可以实现使用标准库:

cout << std::accumulate(std::begin(arra1), std::end(arra1), 0) << endl;

答案 1 :(得分:1)

将数组大小作为参数传递:

#include <iostream>
int arraChec(int arra[], int size) {
    int sum = 0;
    for (int i = 0; i < size; i++) {
        sum += arra[i];
    }
    return sum;
}
int main() {
    int arra1[7] = { 2, 3, 5, 7, 8, 9, 1 };
    std::cout << arraChec(arra1, 7) << std::endl;
}

或使用std::vector

#include <iostream>
#include <vector>

int arraChec(std::vector<int>& arra) {
    int sum = 0;
    for (int i = 0; i < arra.size(); i++) {
        sum += arra[i];
    }
    return sum;
}

int main() {
    std::vector<int> arra1 = { 2, 3, 5, 7, 8, 9, 1 };
    std::cout << arraChec(arra1) << std::endl;
}

如果你指的是某种C风格(sizeof(arra) / sizeof(*arra))构造,我建议你不要使用它。

答案 2 :(得分:1)

使用std::array代替固定大小的C风格数组。

#include <iostream>
#include <array>
#include <numeric>
using namespace std;

int main() {
    array<int, 7> arr = { 2, 3, 5, 7, 8, 9, 1 };
    cout << accumulate(arr.begin(), arr.end(), 0) << endl;
    return 0;
}

输出

35

详细了解std::accumulate

答案 3 :(得分:1)

另一种未提及的方式是:

template<size_t N>
int arraChec(int (&arra)[N]) {
    int sum = 0;

    for (size_t i = 0; i < N; i++) {
        sum = sum + arra[i];
    }
    return sum;
}