理解 C 中的引用 Reference

2021-10-03 09:57:10 字數 2014 閱讀 5479

常引用引用作為返回值

更多細節

引用是乙個別名,也就是某個已存在的變數的另乙個名字。對某個物件的引用進行操作,就是直接對這個物件進行操作。

建立乙個引用的語句如下:

型別識別符號 & 引用變數名 = 目標變數名;
例如:

// 原始變數

int a;

double b;

// 宣告引用變數

int& ref_a = a;

double

& ref_b = b;

我們嘗試對原始變數賦值,並且列印原始變數和引用變數的值:

#include

using

namespace std;

intmain()

編譯執行,輸出結果是:

a: 9

ref_a: 9

b: 6.7

ref_b: 6.7

這個輸出結果是符合預期的。

與指標相區別,引用有以下的特點:

首先,不存在空引用。引用只能也必須在建立時被初始化為乙個已存在的變數(連線到一塊合法記憶體)。而建立指標時可以不賦初值,可以在任何時候被初始化,也可以為空。

int a =9;

int& ref_a = a;

// 正確,引用變數 ref_a 被初始化為 a

int& ref_a;

// 錯誤,未給 ref_a 初值,編譯會出錯

第二,引用不能更換目標。一旦引用被初始化為乙個物件,就不能被指向另乙個物件。而指標可以在任何時候重新指向另乙個物件。

double a =

17.09

;double b =

6.7;

double

& ref_a = a;

// 至此正確

double

& ref_a = b;

// 出錯,不能多次指向

下面我們以實現乙個交換函式為例,對比指標和引用的使用方法。

void

swap

(__,__)

int main (

)

引用實現
void

swap

(double

&x,double

&y)

呼叫時使用:

swap

(a,b)

;

指標實現
void

swap

(double

*x,double

*b)

呼叫時使用:

swap

(&a,

&b);

宣告方式:const 型別識別符號 & 引用變數名 = 目標變數名;

以 const 方式宣告的引用,則不能通過引用對目標變數的值進行修改,從而使目標變數成為 const,比較安全。

int a;

const

int&ref_a = a;

ref_a =1;

// 錯誤

a =1

;// 正確

宣告方式:

型別識別符號 & 函式名 (形參列表及型別說明)

當函式返回乙個引用時,實際上返回乙個指向返回值的隱式指標。這使得函式就可以放在賦值語句的左邊。例如:

#include

using

namespace std;

int vals=

;int

&setvalues

(int i)

intmain()

C 中的引用(記錄 理解)

type name var int main 注意 普通引用在宣告時,必須用其他的變數進行初始化 不能用常量進行初始化 swap函式的實現對比 void swap int a,int b swap a,b void swap int pa,int pb swap a,b 注意 引用作為函式引數宣告時...

C 全面理解C 中的引用

說到引用,一般c 的教材中都是這麼定義的 1,引用就是乙個物件的別名。2,引用不是值不佔記憶體空間。3,引用必須在定義時賦值,將變數與引用繫結。那你有沒有想過,上面的定義正確嗎?編譯器是如何解釋引用的?這裡先給出引用的本質定義,後面我們再進一步論證。1,引用實際是通過指標實現的。2,引用是乙個常量指...

C 全面理解C 中的引用

說到引用,一般c 的教材中都是這麼定義的 1,引用就是乙個物件的別名。2,引用不是值不佔記憶體空間。3,引用必須在定義時賦值,將變數與引用繫結。那你有沒有想過,上面的定義正確嗎?編譯器是如何解釋引用的?這裡先給出引用的本質定義,後面我們再進一步論證。1,引用實際是通過指標實現的。2,引用是乙個常量指...