指針是不能直接進行異或運算的,需要將指針轉換成整型int或long,在Linux系統下只能是long,因爲指針在win系統佔4個字節,在Linux系統佔6個字節。
以下爲兩個指針的異或運算實現指針的交換:
#include <stdio.h>
int main()
{
int *a,*b;
unsigned long aa,bb;
printf("a:%p\n", a);
printf("b:%p\n", b);
aa = (unsigned long)a; //a變量指針轉換成整型
bb = (unsigned long)b; //b變量指針轉換成整型
printf("\n");
aa ^= bb;
bb ^= aa; //此時bb=aa
aa ^= bb; //此時aa=bb
a = (int *)aa; //aa變量指針轉換成指針類型
b = (int *)bb; //bb變量指針轉換成指針類型
printf("a:%p\n", a);
printf("b:%p\n", b);
return 0;
}
在Linux 64系統中的運行結果爲:
a:0x7ffc70da4cf0
b:0x4004e0
a:0x4004e0
b:0x7ffc70da4cf0
因此我們可以看到,交換兩個值也不一定只能藉助臨時變量,異或運算也是一種選擇。