2016-12-04 72 views
0

我想交換使用指針兩個整數的價值兩個整數,看下面的代碼:交換使用指針

void swapArgs(int *a, int *b) { 

    int *temp = &b;           
    b = &a;            
    a = &temp;            
    printf("Swapped Arguments: A=%d, B=%d\n", *a, *b);   
} 

當執行printf的,所產生的價值是巨大的數字。任何人都可以向我解釋我的代碼有什麼問題嗎?仍然是新的指針。

回答

5

的問題是,你需要複製的值,而不是指針:

int temp = *b; 
*b = *a; 
*a = temp; 

注:你的代碼是錯誤的類型分配指針 - &aint**,而bint*(即星號數量不匹配)。你的編譯器應該給你警告。修復它們可以解決問題。

+0

真棒謝謝。所以我的問題是,我分配的整數變量等於地址,而不是實際值? – Froobyflake

+0

@Froobyflake是的,這是問題所在。 – dasblinkenlight

+0

在閱讀答案時我喜歡親愛的鑑賞家@dasblinkenlight – snr

1

記住,你的ab已經指針 - 這樣的功能裏面,你不能使用&(地址運算符),而不是必須使用*(引用操作):

int temp = *b; 
*b = *a;            
*a = temp;