功能难度 - C

时间:2015-05-16 18:23:18

标签: c function

我正在尝试编写一个检查某个数字的函数,如果找到该数字,则将其添加到总数中。

#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(我想要的)。

我错过了一些简单的东西吗?

2 个答案:

答案 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;
 } 

快乐的编码。