C语言 如何操作指针变量的值?

uwopmtnx  于 2023-03-29  发布在  其他
关注(0)|答案(3)|浏览(175)
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中,所以我用给出的方法试了一下,加法部分工作正常,但我不知道为什么减法不工作?

vulvrdjw

vulvrdjw1#

在完成*a=*a+*b;之后,*a的值被更改,因此*b=*a-*b;将使用新值。
您可以通过保存第一次计算的结果并稍后将其分配给*a来解决它。

void update(int *a,int *b) {
    int tmp = *a + *b;       // save for later
    *b = *a - *b;
    *a = tmp;                // use here
}

...或者在进行第二次计算时,通过在第一次计算中否定+ *b的影响:

void update(int *a, int *b) {
    *a = *a + *b;
    *b = *a - *b - *b;
}
tp5buhyn

tp5buhyn2#

*a=*a+*b;更新a指向的对象。然后*b=*a-*b;使用更新后的值,而不是原始值。
要使用原始值,必须创建另一个变量,并使用它临时保存*a的新值或旧值。

0md85ypi

0md85ypi3#

当你传递一个指针时,赋值给被取消引用的指针会改变原来的对象。你需要把结果存储在中间变量中。

void update(int *a,int *b) 
{
    int sum = *a+*b;
    int diff = *a-*b;
    *a = sum;
    *b = diff;  
}

int main() {
    int a, b;

    scanf("%d %d", &a, &b);
    update(&a, &b);
    printf("%d\n%d", a, b);

    return 0;
}

https://godbolt.org/z/Yfr6P6q5r

相关问题