我今天开始在C学习功能。我在函数中的问题" sum"其中I + =来自数组的数字,它确实写出了数字的总和,但是当程序出现时#34;总和"函数整数,我保存这些数字的总和重置为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;
}
答案 0 :(得分:2)
问题是sumup
函数中的形式参数sum
与sumup
中的实际参数main
不同,因此对{{1}的任何更改函数中没有反映在sumup
的{{1}}中。
有几种方法可以解决这个问题:
sumup
中的main
参数定义为<{1}}中sumup
变量的参考:{{ 2}}
sum
中的sumup
参数定义为{em>指针到main
变量{ {1}}:int sum( int hello[], int size, int &sumup )
{
// leave everything else the same.
}
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
答案 1 :(得分:1)
将您的专线sum(hello, size, sumup);
更改为sumup = sum(hello, size, sumup);
。然后,您的返回值将保存在变量sumup中。
如果您不想通过返回值保存sumup变量,您应该了解按引用调用(以及它与按值调用的方式不同)。然后你可以写入函数参数sumup并更改原始值而不是函数内的本地副本。
这将打开指针操作的蠕虫。与C一起玩FUN的最大来源之一; - )
示例:https://www.codingunit.com/c-tutorial-call-by-value-or-call-by-reference
答案 2 :(得分:0)
将函数参数作为引用传递,以便可以访问它们:
void sum(int hello[], int size, int& sizeup)
这将允许sizeup在函数之外保留它的值,因为你传递了sizeup的引用。
答案 3 :(得分:0)
试试这个,
sumup = sum(hello, size, sumup);
你应该得到正确的总和值。
答案 4 :(得分:0)
函数sum
返回一个没有接受它的变量的值。
改变这一行:
sum(hello, size, sumup);
为:
int my_sum = sum(hello, size, sumup);
然后你就可以在你的主体中使用my_sum。
另一个解决方案可以是通过引用将sumup
传递给您的函数,只需将decleration更改为:
void sum(int hello[], int size, int & sumup)