引用與指標

2021-06-27 03:48:29 字數 2514 閱讀 1678

引用有什麼作用呢?  看下面**就知道了:

[cpp]view plain

copy

#include 

using

namespace

std;  

intmain()    

第一行輸出 :ref = 12,num = 12

第二行輸出 :ref = 16,num = 16

第三行輸出 :ref = 18,num = 18

由上面三行輸出可以看出引用ref隨著num的值的改變而改變,再看下面的輸出

第四行輸出 :&ref = 0xbfffeb44,&num = 0xbfffeb44

當取位址符的時候可以看到引用識別符號和被引用變數的位址都是同乙個;至止明白引用的實質就是給某個變數定義了乙個別名,也就是說別引用和引用的變數共用同一塊記憶體空間

下面我們看如果給ref賦值的話會發生什麼情況:

第五行輸出 :ref = 21,num = 21

可以看出給ref賦值的同時 ,也改變了被引用的num的值,這裡

注意的是只把num1的值傳給了ref,而不是將ref變成了num1 的引用...通過下面的位址輸出結果可以知曉~~

第六行輸出 :&ref = 0xbfffeb44,&num = 0xbfffeb44,&num1 = oxbfffeb40

通過第六行的輸出可以知道:引用一旦初始化為某乙個變數,那麼該

引用不可能成為另外變數的引用;

也就是說引用只可以在初始化的時候賦值初始化以後只能發生數值的變化,不能發生源的變化

補充:引用是乙個變數,但和普通變數不同的是在定義的時候引用一定要初始化

即不能只定義: int &ref  ;      //不初始化賦值是錯誤的

下面給出個例子簡單的看下引用應用的例子:

[c-sharp]view plain

copy

#include 

using

namespace

std;  

//使用指標作引數的時候,在函式裡進行了一系列的間接運算

void

my_swap(

int*n1,

int*n2)  

/*使用引用作引數的時候,在函式中可以直接操作實參的引用,實際上就是操作的實參

所以使用引用作為引數使函式呼叫更加直接明了簡單*/

void

my_swap_ref(

int&n1,

int&n2)  

intmain()    

執行輸出結果:

num1 = 21;num2 = 12//指標傳遞引數

num1 = 21;num2 = 12//引用傳遞引數

在這裡肯定有人認為這引用跟指標不是一樣的麼,也是取變數的位址,通過位址來操作位址所指空間的資料麼...   

下面是引用與指標的四大區別:

非空區別

在任何情況下都不能使用指向空值的引用(繼上面引用要初始化...),乙個引用必須總是指向某些物件. 

不存在批向空值的引用這個事實意味著使用的**效率要比使用指標搞

合法性區別

在使用引用之前不需要測試他的合法性;

相反,指標總是被測試,如:防止其為空等

可修改區別

指標可以被重新賦值以指向另外乙個不同的物件

;引用則總是指向初始化被指定的物件,以後不能改變,但指定物件的內容可變化

應用性區別

在兩種情況下應用指標:一是考慮到存在不指向任何物件的可能; 二是需要在不同的時刻指向不同的物件.如果總是指向乙個物件並且一旦指向乙個物件 就不會改變指向,應該使用引用...(有點像****跟情聖的區別...)

指標與引用

摘自 高質量c 程式設計 指標與引用,在more effective c 的條款一有詳細講述,我給你轉過來 條款一 指標與引用的區別 指標與引用看上去完全不同 指標用操作符 和 引用使用操作符 但是它們似乎有相同的功能。指標與引用都是讓你間接引用其他物件。你如何決定在什麼時候使用指標,在什麼時候使用...

引用與指標

引用就是物件的另乙個名字,在實際的程式中,引用主要用作函式的形式引數。引用是一種復合型別,通過在變數名前新增 符號來定義。復合型別是指用其他型別定義的型別。在引用的情況下,每一種引用型別都 關聯到 某一其他型別。引用必須用與該引用同型別的物件初始化。當引用初始化後,只要該引用存在,它就保持繫結到初始...

指標與引用

include iostream using namespace std void testref int i 10 引用不可以為空,他是乙個物件的別名 int ref i ref cout i 00824f1e mov dword ptr i 1 把i的位址傳入eax 並把eax指標的位址傳給re...