指標和引用的區別

2021-07-16 15:16:41 字數 1196 閱讀 5139

c++中有幾種復合型別,這裡介紹引用和指標的區別 

引用其實就是變數的別名,並且引用底層就用指標實現的,只不過引用跟初始化的變數已經繫結了,在作用域中不能再改變引用繫結的實體了。

現按條列出指標和引用的區別: 

1.引用是變數的別名,在定義的時候必須進行初始化,而指標可以先定義,再進行賦值

int i,&j = i;

int &j; //錯誤!必須初始化!

int *j = &i;

int *j;

j = &i;//正確

2.引用一旦初始化,在作用域期間不能再進行改變,但是指標可以改變指向

int i,&j = i;

int k;

&j = k;//錯誤!

j = k; //正確, 這是在對引用變數賦值而不是改變引用指向

int *p;

p = &i;

p = &k;

//上面兩句均正確

3.引用變數在自加時,跟指標變數不同

int *p ,i,&j = i;

j++;//引用變數自加,即給引用變數自加,即相當於i++

*p++;//指標變數自加,相當於給指標變數偏移乙個型別大小的位元組

4.不能有null引用,但可以有null指標 

5.在sizeof中有區別

int

*p,i, &j = i;

printf("%d",sizeof(p)); //輸出為4位元組,為乙個位址空間的大小

printf("%d",sizeof(j)); //輸出為4位元組,為int型別的大小

6.可以有多級指標,但不能有多級引用

總結:總的說來,引用不是乙個物件,僅僅是乙個變數的別名而已,雖然底層是用指標實現的,但是指標本身就是乙個物件,允許對指標進行賦值拷貝等操作,因為引用不是乙個物件,所以很好理解引用不能進行多次賦值,即引用所繫結的物件是不能改變的,即一旦繫結了乙個實體,引用所繫結的實體再也不能改變。 

注意有指向指標的引用,格式為

int

*j;int

*&i = j;

看表示式的時,最簡單的方法是從右向左看,離變數名最近的符號對變數的型別影響最大,上面的第二行,可以這麼看,首先i是乙個引用,前面有*,說明它是指向指標的引用,值為j

指標引用和引用指標的區別

c 在傳參的過程中,指標 和指標引用 是有區別的。雖然,我們往往可以通過傳指標然後通過間址訪問來修改指標所指向物件的值,同樣,通過引用也可以直接修改物件的值。但是,當傳指標的時候有乙個問題,就是,我們雖然可以通過指標來修改指標所指向物件的值,但是我們沒有不能直接修改指標的內容 也就是指標變數存放的位...

傳指標和傳指標引用的區別 指標和引用的區別(本質)

指標傳遞引數本質上是值傳遞的方式,它所傳遞的是乙個位址值。值傳遞過程中,被調函式的形式引數作為被調函式的區域性變數處理,即在棧中開闢了記憶體空間以存放由主調函式放進來的實參的值,從而成為了實參的乙個副本。值傳遞的特點是被調函式對形式引數的任何操作都是作為區域性變數進行,不會影響主調函式的實參變數的值...

傳指標和傳指標引用的區別 指標和引用的區別(本質)

指標傳遞引數本質上是值傳遞的方式,它所傳遞的是乙個位址值。值傳遞過程中,被調函式的形式引數作為被調函式的區域性變數處理,即在棧中開闢了記憶體空間以存放由主調函式放進來的實參的值,從而成為了實參的乙個副本。值傳遞的特點是被調函式對形式引數的任何操作都是作為區域性變數進行,不會影響主調函式的實參變數的值...