void update(int *a,int *b) {
*a=*a+*b;
*b=*a-*b;
}
int main() {
int a, b;
int *pa = &a, *pb = &b;
scanf("%d %d", &a, &b);
update(pa, pb);
printf("%d\n%d", a, b);
return 0;
}
我想用指向a & b的指针把a & B的和存储在a中,把a & b的差存储在b中,所以我用给出的方法试了一下,加法部分工作正常,但我不知道为什么减法不工作?
3条答案
按热度按时间vulvrdjw1#
在完成
*a=*a+*b;
之后,*a
的值被更改,因此*b=*a-*b;
将使用新值。您可以通过保存第一次计算的结果并稍后将其分配给
*a
来解决它。...或者在进行第二次计算时,通过在第一次计算中否定
+ *b
的影响:tp5buhyn2#
*a=*a+*b;
更新a
指向的对象。然后*b=*a-*b;
使用更新后的值,而不是原始值。要使用原始值,必须创建另一个变量,并使用它临时保存
*a
的新值或旧值。0md85ypi3#
当你传递一个指针时,赋值给被取消引用的指针会改变原来的对象。你需要把结果存储在中间变量中。
https://godbolt.org/z/Yfr6P6q5r