我今天开始用C语言学习函数。我在函数“sum”中的问题,其中I+=数组中的数字,它写的是数字的和,但是当程序从“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;
}

最佳答案

问题在于,sumup函数中的形式参数sumsumup中的实际参数main是不同的对象,因此对函数中sumup的任何更改都不会反映在sumup中的main中。
有几种方法可以解决这个问题:
在C++中,可以将sumup中的sum参数定义为sumup中的main变量:

int sum( int hello[], int size, int &sumup )
  {
    // leave everything else the same.
  }

在C和C++中,可以将sumup中的sum参数定义为sumup中的main变量指针:
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
  ...
}

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 );
  ...
}

09-06 17:43