c - 为什么参数的值没有作为该变量的传递地址增加

  • 本文关键字:变量 增加 地址 参数 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 : %dn", getValue, getValu2);
}

上述程序的 o/p 是

getValue :0 and getValu2 : 1

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

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

更改为:

(*getValue)++;

在第二种情况下,您始终分配+1

更改为

*getValue+=1;

现在应该是 4 和 4

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

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

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

[4] 此外,在*getValue=+1;中存在键入错误或不正确地使用operator +=来递增值。正确的方法是*getValue += 1;<</p>

div class="ans>
for(int i=0;i<4;i++)
    *getValue++;

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

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

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

始终将值设置为所需的+1 *getValue+=1;

最新更新