嗨,我有以下程序
#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>
for(int i=0;i<4;i++)
*getValue++;
增加指针而不是其中的值,然后取消引用它。我认为这个UB,但我不确定。
尝试(*getValue)++;
这将首先取消引用指针,然后增加值。
for(int i=0;i<4;i++)
*getValue=+1;
始终将值设置为所需的+1
*getValue+=1;