我尝试使用 ^= 交换值(我知道最好使用另一个变量来执行此操作),
但结果不正确。
#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/