close

C是沒有reference的,相較於pointer,reference顯得平易近人多了!
reference有個很大的特性,它的意思是別名(alias)的意思!
reference不像pointer記錄著變數的記憶體位置,它只是變數的別名!

下面用個簡單的例子講解:

1 int iValue = 2;
2 int &iReference = iValue;
3 cout << iReference << endl;   //會印出2
4 cout << &iReference << endl;  //會印出iValue 的記憶體位置
5 cout << &iValue << endl;    //會印出iValue本身自己的記憶體位置


上面的範例宣告了一個整數變數(iValue),和一個參考變數(iReference) 第一行會先印出2,
因為前面說過參考只是別名, 意思就是說iReference是iValue的別名,
在白話一點iReference等於iValue,
所以第二行會印出iReference(也就是iValue)的記憶體位置,假設印出0x28ff44(每台電腦都不一定是這個值)
第三行就是印出iValue自己的記憶體位置,所以!!!它也會印出0x28ff44!! 跟第二行一樣!! (因為他們兩個相等咩)

reference跟pointer不一樣的還有幾點,
reference一定要有初始值!!!
取值不需要加上*!!

不過其實參考使用的時機大部分是用在函數時, 因為是別名,所以可以避免複製大量的變數到函數去(就算是pointer函數,也會複製)
下面是一個簡單的參考函數範例:

01 void fnReference(int &iValue){
02      iValue = iValue +1;
03      cout << iValue << endl;       
04 }
05 main(){ 
06            
07      int iValue = 2;
08      fnReference(iValue);
09      cout << iValue << endl;
10          
11      system("pause");
12      return 0;
13 }



在上面的範例我們宣告了一個函數(fnReference),其傳遞參數為參考型態(&iValue)
在主程式中(main),傳遞了單純的整數變數進去,
跟pointer不一樣,pointer是傳記憶體位置進去,
參考就直接傳普通的變數進去,
我們在函數中把傳遞進去的參數+1,然後印出,會印出3,
回到主程式以後,在印出iValue,一樣會印出3。
因為我們是傳遞參考,這就是call by reference!

最後,reference還有一個跟pointer不一樣的點!
就是reference不能用來進行運算!!!!!

摘錄自:http://blog.kenyang.net/2011/11/c-reference.html

arrow
arrow
    文章標籤
    C++: Reference (參考)
    全站熱搜
    創作者介紹
    創作者 cout 的頭像
    cout

    火星上的c家家

    cout 發表在 痞客邦 留言(0) 人氣()