2012-07-05 180 views
0

請看下面的代碼片段 - 我已經聲明瞭3個函數(即1傳遞一個int,其他傳遞一個int的引用)。執行程序後,我發現在調用函數(tripleByReference)之後,「count」變量的值沒有被改變以反映它的三元組(count仍然等於5)。然而調用函數(tripleByReferenceVoid)會修改變量,但這是由於直接對變量(count)發生更改的事實。C++參考和參考參數

我明白,通過引用傳遞,調用者給予被調用函數直接訪問調用者的數據並修改它的能力,但不能通過將該變量傳遞給函數來實現(tripleByReference) - 請幫助我理解這個。

#include <iostream> 
using namespace std; 

/* function Prototypes */ 
int tripleByValue(int); 
int tripleByReference(int &); 
void tripleByReferenceVoid(int &); 

int main(void) 
{ 
    int count = 5; 

    //call by value 
    cout << "Value of count before passing by value is: " << count << endl; 
    cout << "Passing " << count << " by value, output is: " 
     << tripleByValue(count) << endl; 
    cout << "Value of count after passing by value is: " << count << endl; 

    //call by reference - using int tripleByReference 
    cout << "\n\nValue of count before passing by reference is: " << count << endl; 
    cout << "Passing " << count << " by reference, output is: " 
     << tripleByReference(count) << endl; 
    cout << "Value of count after passing by reference is: " << count << endl; 

    //call by reference - using void tripleByReference 
    tripleByReferenceVoid(count); 
    cout << "\n\nValue of count after passing by reference is: " << count << endl; 
    cout << endl; 
    system("PAUSE"); 
    return 0; 
}//end main 

int tripleByValue (int count) { 
    int result = count * count * count; 
    return result; 
}//end tirpleByValue function 

int tripleByReference(int &count) { 
    int result = count * count * count; 
    return result; //perform calcs  
}//end tripleByReference function 

void tripleByReferenceVoid(int &count) { 
    count *= count * count; 
}//end tripleByReference function 

謝謝。

+1

爲什麼'x * x'根本改變'x'? – chris 2012-07-05 19:08:24

回答

4

tripleByReference不會更改count的值,因爲您從未分配給它。您正在返回值。

tripleByReferenceVoid是不同的。您正在分配給它(count *= ...),這就是爲什麼會反映這些更改。

+0

謝謝您的回覆。 – Sinan 2012-07-05 19:25:17

3

在您的函數tripleByReference中,您甚至不試圖修改count的值,而在函數tripleByReferenceVoid中,您明確修改了count。因此,顯而易見的和預期的效果:後者功能修改count,前者不。即這些功能完全可以做到你明確和有意識地要求他們做的事情。

這樣的問題很難回答,因爲幾乎不可能理解是什麼讓你問這個問題。你似乎對這兩個功能的行爲不同的事實感到困惑。但是,爲什麼它會讓你感到困惑,當你自己明確地寫出他們在這方面有所不同時呢?

+0

我編輯和切換前/後。我認爲這就是你的意思? – Marlon 2012-07-05 19:18:34

+0

@StackUnderflow:是的,你是對的。謝謝。 – AnT 2012-07-05 19:19:16

+0

感謝您的回覆,我寫了不同的函數來查看這些函數的結果是否會改變變量(count),因爲我知道通過引用傳遞函數,調用者可以直接訪問調用者的數據並修改它,但不能通過傳遞變量來實現 – Sinan 2012-07-05 19:24:54