gpt4 book ai didi

c - 使用指针和 "^="交换值

转载 作者:太空狗 更新时间:2023-10-29 15:50:41 27 4
gpt4 key购买 nike

我尝试使用 ^= 交换值(我知道最好使用另一个变量来执行此操作),但结果不正确。

#include <stdio.h>

int main() {
int a = 3, b = 5, *pa = &a, **ppa = &pa, *pb = &b, **ppb = &pb;
*pa ^= *pb;
*pb ^= *pa;
*pa ^= *pb;
printf("pointer 1: a = %d, b = %d\n", a, b);
a ^= b ^= a ^= b;
printf("variables: a = %d, b = %d\n", a, b);
*pa ^= *pb ^= *pa ^= *pb;
printf("pointer 2: a = %d, b = %d\n", a, b);
return 0;
}

结果是

pointer 1: a = 5, b = 3
variables: a = 3, b = 5
pointer 2: a = 0, b = 3

我想知道为什么 *pa ^= *pb ^= *pa ^= *pb 不能正常工作。谁能告诉我?

最佳答案

赋值之间没有序列点

*pa ^= *pb ^= *pa ^= *pb;

所以行为没有定义。

赋值之间也没有序列点

a ^= b ^= a ^= b;

因此该行的行为也是未定义的。如果这碰巧奏效,那么你就(不)幸运了。

关于c - 使用指针和 "^="交换值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19972154/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com