2017-02-09 90 views
1

我經歷的C++入門的書,我碰到下面的兩個聲明是:參考引用其他的參考和指針引用

  1. 因爲引用是不是對象,我們可以不定義爲參考參考。

  2. 因爲引用不是對象,所以它們沒有地址。因此,我們可能不會定義一個指向參考的指針。

然而,當我運行下面的代碼,我沒有得到錯誤或警告和我的代碼運行正常:

int main(int argc, const char * argv[]) { 
    // insert code here... 

    int i, &ri = i; 
    int &bi = ri; 

    std::cout << "The address of ri is " << &ri << std::endl; 
    std::cout << "The address of bi is " << &bi << std::endl; 

    int* p = &ri; 
    std::cout << p << std::endl; 

    return 0; 
} 

輸出:

The address of ri is 0x7fff5fbff76 
The address of bi is 0x7fff5fbff76c 
0x7fff5fbff76c 

知道爲什麼這作品?

謝謝。

+0

因爲它們都是對同一個變量的引用。良好的閱讀,並可能重複在這裏:[有沒有什麼辦法來找到引用的地址?](http://stackoverflow.com/questions/1950779/is-there-any-way-to-find-the-address -if-a-reference) – user4581301

+0

['''n''應該用來代替'endl'](http://stackoverflow.com/q/213907/995714) –

+0

你的第一個輸出缺少尾部'c' ,但這絕對是一個錯字。 – Quentin

回答

0

他們的意思是說,你不能有int& &類型。

在您的代碼中,參考ri指的是對象i

而當你做int &bi = ri;你沒有參考引用,但是你再次引用同一個對象。

+1

我會reword「你不能有一個'int &&'類型」以避免與右值引用混淆。 – user4581301

0

在上面的代碼中,您尚未創建任何類型的變量來保存引用的地址。

邏輯意義在你的代碼保存的參考地址是:

INT & BI = &ri;

但是這個代碼給出了錯誤。

因此,你的代碼工作,因爲你已經創建了變量,所有變量都包含變量i的地址。

+0

不知道人們如何能夠正確回答。 – UserAnonymous

+0

上面的答案似乎是正確的 – UserAnonymous

+0

只要讓我知道是否需要進行一些概念性的更改。 – UserAnonymous

0

int & bi = ri;

這意味着「設置參考bi等於參考ri」。就像你指定任何其他簡單類型一樣。

INT * P = &ri;

巧妙編譯器代替了「的引用地址」與「的對象的參考引用的地址」。