基本的C指针问题

时间:2010-07-21 13:11:39

标签: c pointers

自从我上次编程C以来已经有一段时间了,似乎我已经忘记了一切 与此同时......我有一个非常简单的指针问题。假设我有 通过循环迭代计算总和的函数。这不仅应该起作用 返回循环计数器,但也计算它的总和。因为我可以回来一个 值我假设我能做的最好就是声明一个指针。我能这样做吗:

   int loop_function(int* sum)
   {
    int len = 10; 

    for(j = 0; j < len; j++) 
    {
      sum += j;
    }

   return(j);
   }   

   ....


   int sum = 0;
   loop_function(&sum);
   printf("Sum is: %d", sum);

或者我是否需要定义一个额外的变量来指向我传递给函数的总和?

非常感谢, 马库斯

7 个答案:

答案 0 :(得分:17)

除了这一行之外,你所拥有的是正确的:

sum += j;

由于sum是一个指针,因此{em>指针中包含的地址由j递增,这不是你想要的。您希望通过j增加指针指向的值,这是通过首先将解除引用运算符*应用于指针来完成的,如下所示:

*sum += j;

另外,你需要在那里的某个地方定义j,但我想你知道这一点,这只是一个疏忽。

答案 1 :(得分:9)

*sum += j;

你正在做的是递增指针(可能不是你想要的)

答案 2 :(得分:3)

应该是:

*sum += j;

所以你增加指向值而不是本地指针变量。

答案 3 :(得分:2)

您不需要创建额外的变量,但需要在循环中

 *sum += j

答案 4 :(得分:1)

你必须写* sum + = j;

这就足够了

答案 5 :(得分:0)

您还可以声明一个简单的结构来保存这两个值,然后传入一个指向该结构实例的指针。这样你就可以操纵这两个变量,并在函数返回后保留它们的值。

struct loop_sum_struct {
    int loop_ctr;
    int sum;
} loop_sum;

loop_function(&loop_sum);

void loop_function(loop_sum_struct *s) {
    int len = 10;
    for(s->loop_ctr = 0; s->loop_ctr loop_ctr++) {
        s->sum += s->loop_ctr;
    }
}

答案 6 :(得分:-1)

这个怎么样?

因为你已经回归int了。所以,另一种方法是将签名更改为

  

int loop_function(int sum)

并且在致电时

  

int sum = 0;

     

...

     

sum = loop_function(sum);