我是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函數。幫幫我!
謝謝。這個例子幫助我理解。我發現一個對象的地址和引用很模糊。 – DeKonTiki
@DeKonTiki @DeKonTiki還有一點需要記住的是,用一個指針作爲參數,當該值被改變時,它不僅在函數內部而且在函數的上下文之外被改變!這就是爲什麼你傳遞一個地址給函數('&i1')。 – 4DaMouf