2017-02-23 127 views
0

我是C++的新手,並且早些時候只做過MATLAB。C++函數輸入參數與指針比較由指針

我的問題是關於以下函數的輸入參數,它們通過值,引用和指針調用變量。

void SwapbyValue (int a, int b){ 
// Usual swapping code 
} 

void SwapbyRef (int &a, int &b){ 
// Usual swapping code 
} 

void SwapbyPoint(int *a,int *b){ 
//Usual swapping code 
} 

由於我的Q是不是上面的功能是如何工作的,而是我如何稱呼他們,我已經離開了代碼。所以,我知道當i1和I2是int時,我們通過鍵入SwapbyRef(i1,i2),SwapbyRef(i1,i2)和SwapbyPoint(& i1,& i2)來調用上述函數。

這讓我困惑不已。好吧,我明白了第一個函數需要價值並且合理。但是在第二種情況下,僅由i1和i2調用沒有意義,因爲當定義函數時,我們將其輸入設置爲&a而不僅僅是a,但它仍然運行。在第三個例子中,我們將輸入參數設置爲一個指針,即*a,但我們在調用它時傳遞的地址爲&a(如0x7956a69314d8)。

爲什麼當我們將錯誤的輸入傳遞給函數時會運行?例如,一個Matlab的比喻,它看起來像傳遞一個字符到一個int函數。幫幫我!

回答

4

int & a是一個int的引用,意思是說它會接受所有已經存在的int變量。你不能做的是例如SwapbyRef(4, 5)使用SwapbyRef (int &a, int &b),因爲4和5是臨時整數,不存在於內存中某處作爲變量。

順便說一句,你應該查找一下C++中的引用是什麼。我認爲,這對你最有幫助。

+0

謝謝。這個例子幫助我理解。我發現一個對象的地址和引用很模糊。 – DeKonTiki

+1

@DeKonTiki @DeKonTiki還有一點需要記住的是,用一個指針作爲參數,當該值被改變時,它不僅在函數內部而且在函數的上下文之外被改變!這就是爲什麼你傳遞一個地址給函數('&i1')。 – 4DaMouf