请问ap =( int *) &a;这是什么意思?ap++;bp++;为什么要用这两个语句?为什么a,b两个值可以交换?

#include "pch.h"
#include
using namespace std;
int main()
{
double a = 123.456, b = 456.789;
int ap, *bp;
ap =( int *) &a;
bp =(int
)(&b);
cout << "a=" << a << "b=" << 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 << "b=" << b << endl; cout <<*ap << *bp;
return 0;
}

ap=(int*)&a; 这句话是把a的地址(double*)型转化成int*型,把int*的这个值赋值给ap这个int*型指针。

涉及到^异或的前三行(ap++前面)是交换a和b的值。(用异或运算交换值)
ap++;bp++; 这两句话是让ap和bp指向的地址往前进sizeof(int)个字节,访问可一个未知的地方。
接下来三行是把现在ap和bp所指向的值交换。(因为sizeof(double)>sizeof(int),所以会交换一部分a和b)