大神求解 有关c++指针的问题

double a = 123.456, b = 456.789;
int ap, *bp;
ap = (int
)(&a);
bp = (int*)(&b);
cout << "a=" << a << "\tb=" << b << endl;
*ap = (*ap) ^ (*bp);
*bp = (*ap) ^ (*bp);
*ap = (*ap) ^ (*bp);
ap++;
bp++;
*ap = (*ap) ^ (*bp);
*bp = (*ap) ^ (*bp);
*ap = (*ap) ^ (*bp);
cout << "a=" << a << "\tb=" << b << endl;

为什么这段码可以让两个值的数值互换呢

基本数据类型所占字节数和机器平台有关,目前主流电脑上 int 类型所占字节数为4,
double 类型所占字节数为8。

请注意题目中a, b 声明类型为double, 而ap,bp声明类型为指向int的指针。
因此需要进行两次操作(分别交换低4字节和高4字节),方可完成最终的交换。

如果对您有帮助,请点击采纳答案好吗,谢谢~~

算数 与 你可以找两个数 换算成二进制 与 一下 这两个数就会交换

*ap = (*ap) ^ (*bp);
*bp = (*ap) ^ (*bp);
*ap = (*ap) ^ (*bp);
这段代码实现ap和bp交换

^是xor运算,规则是
0 ^ 0 = 0
0 ^ 1 = 1
1 ^ 0 = 1
1 ^ 1 = 0
也就是相等为0,不等为1。
假设a=1,b=2(二进制是a=01 b=10)
a = a ^ b
此时a = 01 ^ 10 = 11
b = a ^ b
此时 b = 11 ^ 10 = 01
a = a ^ b
此时 a = 11 ^ 01 = 10
最后a = 2 b=1
也就是将a b颠倒了。