嗨,我有以下程序
#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
,因为我已经在函数中传递了变量的地址了?
我的理解是错的,这种行为是否正确?如果是,那么任何人都能解释一下吗?我还需要进行哪些修改以获得正确的价值?
答案 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;