gpt4 book ai didi

c++ - 已计算但未存储的总和。为什么?

转载 作者:太空宇宙 更新时间:2023-11-04 06:56:21 25 4
gpt4 key购买 nike

我今天开始学习 C 语言的函数。我在函数“sum”中的问题,其中我 += 数组中的数字,它确实写了数字的总和,但是当程序从那个“sum”函数中出来时,我保存这些数字总和的整数重置为 0 和我似乎无法弄清楚为什么。这是代码,我真的希望你能帮助我。

#include <iostream>
#include <time.h>
#include <stdlib.h>
using namespace std;
void arr(int hello[], int size) {
srand(time(NULL));
for (int i = 0; i < size; i++) {
hello[i] = rand() % 100;
}
}
void print(int hello[], int size) {
for (int i = 0; i < size; i++) {
cout << hello[i] << " ";
}
}
int sum(int hello[], int size, int sumup) {
for (int i = 0; i < size; i++) {
sumup += hello[i];
}
cout << endl;
cout << "Sum of these numbers: " << sumup << endl;
return sumup;
}
int SumEvenOrOdd(int sumup, int size) {
int average = sumup / size;
cout << "Average of the all numbers in array: " << average << endl;
return average;
}
int main() {
bool bye = false;
const int size = 10;
int hello[size], sumup = 0, input;
arr(hello, size);
print(hello, size);
sum(hello, size, sumup);
SumEvenOrOdd(sumup, size);
cin.get();
cin.get();
return 0;
}

最佳答案

问题在于 sum 函数中的形参 sumupmain 中的实参 sumup 是不同的对象,因此函数中对 sumup 的任何更改都不会反射(reflect)在 mainsumup 中。

有几种方法可以解决这个问题:

  1. 在 C++ 中,您可以将 sum 中的 sumup 参数定义为对 sumup 变量的引用main 中:
    int sum( int hello[], int size, int &sumup )
    {
    // leave everything else the same.
    }
  2. 在 C 和 C++ 中,您可以将 sum 中的 sumup 参数定义为指向 指针 main 中的>sumup 变量:
    int sum( int hello[], int size, int *sumup ) // leading * is necessary
    {
    ...
    *sumup += hello[i]; // leading * is necessary
    }

    int main( )
    {
    ...
    sum( hello, size, &sumup ); // leading & is necessary
    ...
    }
  3. sum 的结果分配回 sumup 或另一个变量:
    int newsum = sum( hello, size, sumup );
    虽然问题变成了,为什么首先将 sumup 作为参数传递?只需在 sum 中声明一个局部变量来保存值,然后返回:
    int sum( int hello[], int size )
    {
    int result = 0;
    for ( int i = 0; i < size; ++i )
    result += hello[i];
    return result;
    }

    int main( )
    {
    ...
    int sumup = sum( hello, size );
    ...
    }

关于c++ - 已计算但未存储的总和。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43946447/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com