Simple Swap

這個應該是大家學習C語言,第一個學會的 Fuction。

void swap(int a, int b){
    int tmp = a;
    a = b;
    b = tmp;
}

Swap by Pointer

記得,C99 規格書告訴我們。C語言沒有所謂 Call By Address, 只有 Call by Value。 其他網站上寫 Call by Reference 只是他們方便教課用的。

郭晉魁教授 – c語言有沒有call by reference(or call by address) ?
http://eportfolio.lib.ksu.edu.tw/~T093000170/blog?node=000000119


void swap(int *a, int *b){
    int tmp = *a;
    *a = *b;
    *b = tmp;
}

Swap by XOR (Bitwise Operation)

還記得 XOR 的特性嗎?忘記的可以來這裡複習。

XOR 可以做為最基本的加密方法,因為他有這個特性:做兩次一樣的運算等於沒做。

所以 A xor B 經過傳輸以後,解密 ( A xor B ) xor B = A;

知道這個特性就可以用 xor 做交換了

A xor B xor A = B
B xor B xor A = A

void XorSwap( int* x, int* y ) {
    if (x != y){
        *x ^= *y;
        *y ^= *x;
        *x ^= *y;
    }
}

Swap by Macro

根據前文 【C語言】define用法整理|macro巨集小技巧 我們學會了巨集的技巧。

#define SWAP(x, y) \
    int tmp = x;\
    x = y;\
    y = tmp;

以及和第一個方法很樣的:
Horowitz的Fundamentals of Data Structures in C一書中使用的。

#define SWAP(x, y, t) ((t) = (x), (x) = (y), (y) = (t))
最後修改日期: 19 5 月 2020

留言

撰寫回覆或留言

發佈留言必須填寫的電子郵件地址不會公開。