C - 将指针作为参数传递
C - Passing pointers as parameters
这是我编写的代码:
#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
在我的 [=14= 中作为指针传递时没有被修改] 函数...
你的函数应该是这样的
void add(int *a, int i){
while(i != 0){
(*a)++; // deference the value and increment it.
i--;
}
}
有了这个
/* 移动指针到下一个位置 */
a++;
在函数中,指针本身前进,而不是增加指针指向的值。改函数如下
void add(int *a, int i){
while(i != 0){
( *a )++;
i--;
}
}
或者表达式语句( *a )++;
可以代替++*a;
此外,如果第二个参数的类型为 unsigned int
,函数会更安全。否则你必须检查参数的符号。
AntonH 上面的评论是正确答案。
我会扩展它:
void add(int *a, int i){
while(i != 0){
a++;
i--;
}
}
您已将 'a' 定义为指向 int (int*) 的指针。您在 'a' 上执行的任何操作(例如“++”)都是在指针上完成的,而不是在指向的值上完成的。
因此,您应该将 a++
替换为 (*a)++
以增加 "what is pointed by a"
这是我编写的代码:
#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
在我的 [=14= 中作为指针传递时没有被修改] 函数...
你的函数应该是这样的
void add(int *a, int i){
while(i != 0){
(*a)++; // deference the value and increment it.
i--;
}
}
有了这个
/* 移动指针到下一个位置 */
a++;
在函数中,指针本身前进,而不是增加指针指向的值。改函数如下
void add(int *a, int i){
while(i != 0){
( *a )++;
i--;
}
}
或者表达式语句( *a )++;
可以代替++*a;
此外,如果第二个参数的类型为 unsigned int
,函数会更安全。否则你必须检查参数的符号。
AntonH 上面的评论是正确答案。
我会扩展它:
void add(int *a, int i){
while(i != 0){
a++;
i--;
}
}
您已将 'a' 定义为指向 int (int*) 的指针。您在 'a' 上执行的任何操作(例如“++”)都是在指针上完成的,而不是在指向的值上完成的。
因此,您应该将 a++
替换为 (*a)++
以增加 "what is pointed by a"