自从我上次编程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);
或者我是否需要定义一个额外的变量来指向我传递给函数的总和?
非常感谢, 马库斯
答案 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);