^= を使用して値を交換しようとしましたが (これを行うには別の変数を使用する方がよいことはわかっています)、結果は正しくありません。
#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
なぜうまくいかないのか知りたいです。誰でも教えてもらえますか?