引用型別及與指標的比較(C 筆記)

2021-10-19 07:56:03 字數 1973 閱讀 3546

引用是c++在c語言上延伸的一種新的機制,是對c語言中指標的功能的一種新的實現方式。

引用型別

.引用(&)是識別符號的別名,即變數的別名。

.在定義乙個引用時,必須同時對它初始化,使它指向乙個已存在的物件。

int i=

10;int

& ri=i;

//定義int引用ri,並初始化為變數i的引用

此時ri相當於變數i的另乙個別名,操作ri等效操作i;

int i =10;

int& ri = i;

ri--

;cout << ri << endl;

cout << i << endl;

//結果是9 9

.引用經初始化後,就不能讓其指向其他物件。

與指標的異同

相同:1、都是位址的概念,指標指向一塊記憶體,內部儲存的內容是所指的記憶體的位址;引用是模組記憶體的別名。

2、引用和指標,在記憶體中都是佔4個位元組的儲存空間。因為它們存放的都是所指物件位址。

不同:1、指標是乙個實體,在記憶體中另外的位址儲存,但引用只是變數的別名,它的位址就是所指變數的位址。

2、在使用兩者進行操作原物件時,引用使用時無需解引用(*),指標需要解引用;引用比指標使用起來形式上更漂亮,使用引用指向的內容時可以直接用引用變數名,而不像指標一樣要使用** ;定義引用的時候也不用像指標一樣使用& 取址。

3、引用在初始化後不能讓其指向其他物件,但指標可以。

int i =

10,j=5;

int& r = i;

int* l =

&i; r = j;

//可行,但r所指變數依舊是i,這裡只是把j的值賦予了i(r);

&r = j;

//報錯

l =&j;//可行,使l指向了j

4、引用沒有const,指標有const,被const修飾後的指標無法指向其他物件。(const相關以後講)

5、引用不能為空,在定義時就需初始化;指標可以為空。

6、對引用和指標使用sizeof的意義是不同的,sizeof(引用)得到的是引用所指物件的物件,但sizeof(指標)得到的是指標本身的大小。

char c =

'0';

char

& rc = c;

char

* lc =

&c; cout <<

sizeof

(rc)

<< endl;

cout <<

sizeof

(lc)

<< endl;

//結果是1 4

7、引用和指標的自增(++)運算意義不一樣;

操作引用等同於操作原變數,其實質是原變數的自增運算;

但指標的指標的自增是使指標下移一位。

什麼時候使用引用、什麼時候使用指標

使用引用引數的主要原因有兩個:

程式設計師能修改呼叫函式中的資料物件

通過傳遞引用而不是整個資料–物件,可以提高程式的執行速度

一般的原則:

對於使用引用的值而不做修改的函式:

如果資料物件很小,如內建資料型別或者小型結構,則按照值傳遞

如果資料物件是陣列,則使用指標(唯一的選擇),並且指標宣告為指向const的指標

如果資料物件是較大的結構,則使用const指標或者引用,已提高程式的效率。這樣可以節省結構所需的時間和空間

如果資料物件是類物件,則使用const引用(傳遞類物件引數的標準方式是按照引用傳遞)

對於修改函式中資料的函式:

如果資料是內建資料型別,則使用指標

如果資料物件是陣列,則只能使用指標

如果資料物件是結構,則使用引用或者指標

如果資料是類物件,則使用引用

C 引用與指標的比較

c 語言中,函式的引數和返回值的傳遞方式有三種 值傳遞 指標傳遞和引用傳遞。引用與指標的比較 1 引用被建立的同時必須被初始化 指標則可以在任何時候被初始化 2 不能有null引用,引用必須與合法的儲存單元關聯 指標則可以是null 3 一旦引用被初始化,就不能改變引用的關係 指標則可以隨時改變所指...

C 引用與指標的比較

c 引用與指標的比較 c 語言中,函式的引數和返回值的傳遞方式有三種 值傳遞 指標傳遞和引用傳遞。引用與指標的比較 1 引用被建立的同時必須被初始化 指標則可以在任何時候被初始化 2 不能有null引用,引用必須與合法的儲存單元關聯 指標則可以是null 3 一旦引用被初始化,就不能改變引用的關係 ...

C 引用與指標的比較

c 引用與指標的比較 引用是c 中的概念,初學者容易把引用和指標混淆一起。一下程式中,n是m的乙個引用 reference m是被引用物 referent int m int n m n相當於m的別名 綽號 對n的任何操作就是對m的操作。所以n既不是m的拷貝,也不是指向m的指標,其實n就是m它自己。...