我正在尝试编写一个检查某个数字的函数,如果找到该数字,则将其添加到总数中。
#include <stdio.h>
void unitSum(int input[], int output, int unit)
{
for (int n = 0; n < 5; n++)
{
if(input[n] == unit)
output = output + unit;
}
}
int main (void)
{
int array[5];
int total = 0;
for(int a = 0; a < 5; a++)
{
scanf("%d", &array[a]);
}
unitSum(array, total, 1);
/*for (int n = 0; n < 5; n++)
{
if(array[n] == 1)
total = total + 1;
}*/
printf("%d", total);
}
如果我使用输入&#39; 1 1 2 2 2&#39;运行此程序我得到一个0的输出。但是,如果我取消注释底部的FOR循环,并注释掉函数调用。输出变为3(我想要的)。
我错过了一些简单的东西吗?
答案 0 :(得分:5)
C
中,参数由值传递,而不是通过引用传递,这意味着您的函数会对变量output
进行复制并且仅处理副本,因此不会更改原件。因此,如果您希望函数不在本地更改其中一个参数,则必须将指针传递给它。
在您的代码中,这将解决:
// int *output is the pointer to an int variable
void unitSum(int input[], int *output, int unit)
{
for (int n = 0; n < 5; n++) {
if(input[n] == unit)
// here you change the value of the variable that is
// located in this address in memory
(*output) = (*output) + unit;
}
}
// ...
// &total is the pointer to variable total
unitSum(array, &total, 1);
答案 1 :(得分:1)
只需更改你的调用函数行unitSum(array,total,1);
to total = unitSum(array,total,1);并在您的功能unitSum更改
将类型返回到int并在关闭for循环后返回输出。它将是
解决。
int unitSum(int input[], int output, int unit)
{
for (int n = 0; n < 5; n++)
{
if(input[n] == unit)
output = output + unit;
}
return output;
}
快乐的编码。