引用和指標

2021-10-03 00:06:40 字數 824 閱讀 1450

int a =10;

int*p =

&a;int b =20;

int&rb = b;

上面這一行裡面有乙個整形變數a和乙個指標變數p,p指向a的儲存單元,即p的值是a儲存單元的位址。

下面這一行定義了乙個整形變數b和這個整形b的引用rb,事實上b和rb是同乙個東西,在記憶體占有同乙個儲存單元。

(1)從概念上來說:引用就是乙個別名,與引用的實體共用同一塊記憶體空間。

(2)從底層實現上來看:編譯器在底層實際上是將引用轉化成指標來進行處理的。

(3)引用在被定義的時候,必須初始化,而指標可以是空值,可以在任何時候被初始化。

(4)沒有null的引用,但有null指標。

(5)有多級的指標,但沒有多級的引用。

(6)指標的值在初始化後可以改變,即指向其它的儲存單元,而引用在進行初始化後就不會再改變了。

(7)在」sizeof」中含義不同,引用結果為引用所指向的變數(或物件)的大小,而」sizeof指標」得到的是指標本身的大小(32位平台下佔四個位元組);

(8)引用自加即引用的實體+1;指標自家即指標向後偏移乙個型別的大小。

(9)訪問實體方式不同,指標需要顯示解引用,而引用編譯器自己回處理。

使用場景

傳引用這種方法效率比較高,不會生成實參的乙份拷貝,同時比較節省空間,因為不會建立臨時變數。

可以通過修改形參來改變實參,因為形參就是實參的別名,如果不需要形參來改變實參,可以通過const來修飾。

2.做返回值

引用作為函式的返回值,不能返回函式棧上的空間。

傳引用比傳值效率高,傳引用和傳指標效率基本相同。

指標和引用,const 指標和const 引用

指標和引用是在使用中經常弄混淆的兩個概念。引用 reference 為物件起了另外乙個名字,用符號 表示。name,例如 int i 1024 int ref i 一般在初始化變數時,初始值會被拷貝到新建立的物件中,然而定義引用時,程式把引用和它的初始值繫結 bind 在一起,而不是將初始值拷貝給引...

指標和引用

一 先看一段 include using namespace std void freeptr1 int p1 void freeptr2 int p2 void main 思考 在 freeptr1 和freeptr2 的比較中,你能發現它們的不同點嗎?二 對 進行解釋 include using...

指標和引用

指標與引用看上去完全不同 指標用操作符 和 引用使用操作符 但是它們似乎有相同的功能。指標與引用都是讓你間接引用其他物件。你如何決定在什麼時候使用指標,在什麼時候使用引用呢?首先,要認識到在任何情況下都不能使用指向空值的引用。乙個引用必須總是指向某些物件。因此如果你使用乙個變數並讓它指向乙個物件,但...