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"