以下是我编码的内容:
#include <stdio.h>
void add(int *a, int i){
while(i != 0){
a++;
i--;
}
}
int main(){
int a = 6;
add(&a, 4);
printf("a = %d\n", a);
return 0;
}
结果
a = 6
我期待的结果当然是10
,但我不明白为什么a
在我将其作为指针传递给我时未被修改add
功能......
答案 0 :(得分:4)
在函数中,提升指针本身,而不是递增指针指向的值。按以下方式更改功能
void add(int *a, int i){
while(i != 0){
( *a )++;
i--;
}
}
或者表达式语句( *a )++;
可以替换为++*a;
如果第二个参数的类型为unsigned int
,则该函数可能更安全。否则你必须检查参数的符号。
答案 1 :(得分:2)
你的功能应该是这样的
void add(int *a, int i){
while(i != 0){
(*a)++; // deference the value and increment it.
i--;
}
}
用这个
/ *将指针移动到下一个位置* /
一个++;
答案 2 :(得分:2)
AntonH上面的评论是正确答案。
我会扩展它:
void add(int *a, int i){
while(i != 0){
a++;
i--;
}
}
您已经定义了&#39; a&#39;作为指向int(int *)的指针。你做的任何事情&#39; a&#39;例如&#39; ++它是在指针上完成的,而不是在指向的值上完成的。
因此,您应该将a++
替换为(*a)++
以增加&#34;&#34;