C - 将指针作为参数传递

时间:2017-03-28 20:05:10

标签: c function pointers parameters subroutine

以下是我编码的内容:

#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功能......

3 个答案:

答案 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;

指向的内容