指針的異或運算

指針是不能直接進行異或運算的,需要將指針轉換成整型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

因此我們可以看到,交換兩個值也不一定只能藉助臨時變量,異或運算也是一種選擇。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章