2011-05-24 23 views
0

可能重複:
Pointer vs. Reference在函數定義中懷疑相關'&'運算符!

大家好,

我試圖去探索,我遇到了與參考運營商關注的問題。考慮通過引用交換代碼如下正常呼叫,其工作方式所需

#include<iostream> 
using namespace std; 
void test(int *a,int *b){ 
    int temp; 
    temp = *a; 
    *a= *b; 
    *b= temp; 
    cout<<"\n Func a="<<*a << " b=" << *b; 
} 

int main() 
{ 
    int a=5,b =3; 
    cout<<"\n Main a="<<a << " b=" << b; 
    test(&a,&b); 
    cout<<"\n Main again a="<<a << " b=" << b; 
    return 0; 
} 

在另一方面的碼如下面也做了同樣種類的交換,準確地得到相同的結果。

#include<iostream> 
using namespace std; 
void test(int &a,int &b){ 
    int temp; 
    temp = a; 
    a= b; 
    b= temp; 
    cout<<"\n Func a="<<a << " b=" << b; 
} 

int main() 
{ 
    int a=5,b =3; 
    cout<<"\n Main a="<<a << " b=" << b; 
    test(a,b); 
    cout<<"\n Main again a="<<a << " b=" << b; 
    return 0; 
} 

有人能解釋一下不同的是,在第二個例子中的函數調用(我很舒服第一部分中的地址作爲參考,而在第二種情況下會發生什麼)?

在同一行,希望在賦值語句同樣的情況也即

int a=5; 
int &b=a; 

在此先感謝。

編輯:

感謝您的答覆。但我的疑問是,究竟發生在內存

INT *指針= & X
店的地址,但是當我們做

INT &點= X會發生什麼。

+6

你在問一個非常普遍的問題,其答案將在C++一書中佔據一章。讀一本書。 – 2011-05-24 08:29:43

+0

獲得一本好的C++書籍,他們被稱爲「參考」。它們基本上是另一個變量的別名。 – Xeo 2011-05-24 08:30:04

回答

4
  • 兩個版本都執行相同的工作,很可能編譯器會發出相同的目標代碼。
  • 使用參考參數的版本更容易閱讀。
  • 您可以將NULL指針傳遞給使用指針導致內存違規的版本。參考參數無法做出同樣的錯誤。
0

&表示您通過引用傳遞參數。您傳遞的變量與您在函數中操作的變量完全相同。實際上,在使用指針或引用之間沒有明顯的區別,因爲當您傳遞指針並將其解引用時,您將再次獲得完全相同的變量。總結一下:在這兩種情況下,都可以修改傳入的變量。相反,當你傳遞變量值時。

0

在這兩種情況下,您都通過引用傳遞變量。在第一個函數中,您可以概念性地考慮正在傳遞的地址。在第二個例子中,我概念地想到了變量本身被傳遞,但是通過引用而不是按值傳遞。

我不是100%確定的,但我懷疑在大多數編譯器中他們會編譯成相同的目標代碼。