我今天开始用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
函数中的形式参数sum
与sumup
中的实际参数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 );
...
}