1. 程式人生 > >C/C++中的取地址與引用

C/C++中的取地址與引用

取地址和引用都採用&的識別符號,很容易讓人造成誤會。

就c/C++而言。引用只是C++中的知識,而取地址是兩者共有的。

取地址:

在第6行中我定義了一個指向int型別的指標p,運用&a獲取a的地址,並將a的地址賦予它,即p指向a所在的空間。

在第7行中取p所指向空間的值(*:有個高階名字叫解引用)輸出。

引用:

在第6行我定義了一個引用b,並將a賦予b。其實質就是給a取了一個小名叫b。對a操作就是對b操作,如果改變b的值(eg。b=20),那麼a的值也相應改變(a也會等於20)

從第7、8行更能反應我上面說的,a和b的值相等,並且地址也相同。因此引用是不佔用空間的,僅僅是個別名而已。

在函式呼叫的時候也可能會混淆引用與取地址:

先看一下第2、3行的函式原型。兩個函式的功能都是交換兩個數。swap1的兩個形參都是指標,而swap2的形參是兩個引用。

再看一下第8行、第9行,呼叫swap1的時候傳了兩個地址給它(x=&a,y=&b),即x指向a的空間,y指向b的空間。呼叫swap2的時候傳了兩個引用給它(x=a,y=b),即x只是a的一個別名,y是b的一個別名,實則都代表同一塊空間。

函式呼叫的時候,引用相對於指標來說更高效、跟簡便。因為指標傳參的實質還是傳值呼叫,copy地址需要開銷,而引用直接被編譯器優化。有些時候需要二級指標的地方,使用指標的引用會使問題簡化很多,我在對樹的操作的時候就碰到過,大家可以感受一下。