为什么参数值不会随着该变量的传递地址而增加?

时间:2017-02-03 07:06:39

标签: c pointers

嗨,我有以下程序

#include <stdio.h>
#include <string.h>

void fun1(int *getValue)
{
    for(int i=0;i<4;i++)
        *getValue++;
}

void fun2(int *getValue)
{
    for(int i=0;i<4;i++)
        *getValue=+1;
}

void main()
{
    int getValue=0,getValu2=0;
    fun1(&getValue);    
    fun2(&getValu2);
    printf("getValue :%d and getValu2 : %d\n", getValue, getValu2);
}

以上程序的o / p是

getValue :0 and getValu2 : 1

现在我期待两种情况下的值都应该是4,因为我已经在函数中传递了变量的地址了? 我的理解是错的,这种行为是否正确?如果是,那么任何人都能解释一下吗?我还需要进行哪些修改以获得正确的价值?

3 个答案:

答案 0 :(得分:5)

在第一种情况下,增加指针的地址(不是传递的变量的值):

更改为:

(*getValue)++;

在第二种情况下,您始终指定+1

更改为

*getValue+=1;

现在它应该是4和4

答案 1 :(得分:0)

[1]您看到的输出是正确的。

[2]您看到的行为是因为*getValue++;*(getValue++);相同而operator++的优先级大于dereference operator *。因此,根据优先级getValue首先递增,因此不再指向int main::getValue,因此main::getValue不会按预期递增。

[3]要获得预期的行为,请使用(*getValue)++

[4]此外,operator +=中存在输入错误或错误使用*getValue=+1;来增加值。正确的方式是*getValue += 1;

答案 2 :(得分:0)

for(int i=0;i<4;i++)
    *getValue++;

增加指针而不是其中的值,然后取消引用它。我认为这个UB但我不确定。

尝试(*getValue)++;这将首先取消引用指针,然后增加值。

for(int i=0;i<4;i++)
    *getValue=+1;

始终将值设置为您想要+1

*getValue+=1;