2014-09-24 101 views
0

我很困惑C++指針和引用操作符。我的主要困惑是以下(簡單)的代碼:指針與C++混淆

#include <iostream> 

using namespace std; 

void changeInt(int &a) 
{ 
    a *= 3; 
} 

int main() 
{ 
    int n = 3; 
    changeInt(n); 
    cout << n << endl; 

    return 0; 
} 

主要是,我很困惑,爲什麼改變地址(&一)改變實際變量(n)。當我第一次嘗試這個問題時,這是我的代碼:

#include <iostream> 

using namespace std; 

void changeInt(int &a) 
{ 
    *a *= 3; 
} 

int main() 
{ 
    int n = 3; 
    changeInt(n); 
    cout << n << endl; 

    return 0; 
} 

但是這給了我一個錯誤。爲什麼當我更改地址時會更改變量,但是當我更改地址指向的值時出現錯誤?

回答

3

你的第二個例子是無效的C++,你只能取消引用一個指針(或一個對象的類型超載operator*,這不是你的情況)。

你的第一實例通過參考傳遞參數int &a不是「的地址的」,這是一個參照本發明的),這就是爲什麼改變到a真的是一個變化的對象由被傳遞函數(在你的情況下,n

+0

但在這裏它另有說明:http://www.cplusplus.com/doc/tutorial/pointers/ – 2014-09-24 03:18:41

+0

@ Asad-ullahKhan:不,它不會:頁面提及'&'操作符,但是您的沒有使用它(你正在聲明一個引用,用int&') – quantdev 2014-09-24 03:19:48

+0

OHHH,這更有意義!謝謝! – 2014-09-24 03:20:42

2

上下文中的和號(&)表示參考,而不是「地址」。例如:

int some_int; 

int & a = some_int; // Declare 'a', a reference to 'some_int' 

int * p = &some_int; // '&' in this context is "the address of" 'some_int' 

引用在許多方面等同於指針,但它的行爲類似於值類型。 請參閱this threadwikipedia entry瞭解更多信息。

1

&符號表示一個變量是通過引用傳遞給你的函數 - 但在函數內部,變量被視爲按值傳遞。這是syntactic sugar,使編寫接受引用的代碼更容易理解。