特殊的「別名」 引用 詳解

2021-10-05 03:43:12 字數 3292 閱讀 2179

引用專題

變數名回顧

變數名實質上是一段連續儲存空間的別名,是乙個標號(門牌號)

程式中通過變數來申請並命名記憶體空間

通過變數的名字可以使用儲存空間

問題 1:對一段連續的記憶體空間只能取乙個別名嗎?

a) 在c++中新增加了引用的概念

b) 引用可以看作乙個***已定義變數***的別名

c) 引用的語法:type& name = var;

d) 引用做函式引數那?(引用作為函式引數宣告時不進行初始化)

#include

#include

intmain

(void

)

執行結果:

屬於c++編譯器對c的擴充套件

#include

#include

// question: is it possible to compile in c

intmain()

問題:c中可以編譯通過嗎? yes

執行結果:

普通引用在宣告時必須用其它的變數進行初始化,

引用作為函式引數宣告時不進行初始化

#include

#include

void

swap

(int a,

int b)

// methods a, using a pointer

void

swap1

(int

*a,int

*b)// method 2: use references

void

swap2

(int

&a,int

&b)int

main()

執行結果:

1)引用作為其它變數的別名而存在,因此在一些場合可以代替指標

2)引用相對於指標來說具有更好的可讀性和實用性

int

swap

(int

&a,int

&b)int

swap

(int

*a,int

*b)

思考1:c++編譯器背後做了什麼工作?

#include

#include

/*int swap1(int &a, int &b)*/

intswap2

(int

*const _a,

int*

const _b)

intmain()

執行結果:

引用是乙個有位址,引用是常量。。。。。

char

*const p

1)引用在c++中的內部實現是乙個常指標

type& name == type* const name

2)c++編譯器在編譯過程中使用常指標作為引用的內部實現,因此引用所占用的空間大 小與指標相同。

3)從使用的角度,引用會讓人誤會其只是乙個別名,沒有自己的儲存空間。這是c++ 為了實用性而做出的細節隱藏

1)當實參傳給形參引用的時候,只不過是c++編譯器幫我們程式設計師手工取了乙個實參地 址,傳給了形參引用(常量指標)

2)當我們***使用引用***語法的時,我們不去關心編譯器引用是怎麼做的 當我們***分析奇怪的語法現象***的時,我們才去考慮c++編譯器是怎麼做的

#include

#include

void

boy_home

(int

**meipo)

void

boy_home1

(int

*&meipo)

intmain()

在 c++中可以宣告 const 引用

語法: const type& name = var;

const 引用讓變數擁有唯讀屬性

分兩種情況: 1. 用變數初始化常引用

2. 用字面量初始化常量引用

#include

#include

intmain()

const 引用結論:1)const & int e 相當於 const int * const e

2)普通引用 相當於 int *const e1

3)當使用常量(字面量)對const引用進行初始化時,c++編譯器會為常量值分配空間, 並將引用名作為這段空間的別名

4)使用字面量對const引用初始化後,將生成乙個唯讀變數

1. 使用未初始化的指標

int

main()

2. 將值當做位址賦給指標

int

main()

3. 忘記解引直接訪問記憶體

int

main()

return0;

}

4. 再次使用忽略重新賦初值

int

main()

while

(strcmp

(input,

"done")!=

0);return0;

}

C 特殊的「別名」引用

1 在c 中新增加了引用的概念 2 引用可以看作乙個已定義變數的別名 3 引用的語法 type name var 4 引用做函式引數那?引用作為函式引數宣告時不進行初始化 例項 include include intmain void 屬於c 編譯器對c的擴充套件。例項 問題 c中可以編譯通過嗎?i...

引用 變數的別名

1.引用只可以乙個變數所賦值,賦值之後不可以再作為另乙個變數的引用。舉例 int a 0 int b 1 int r a r b error 什麼可以被引用 真值,指標變數。for instance 1.int r 1 相當於 double temp double 1 其實應該也可以是int型別 i...

引用 變數的別名,並非指標

引用是乙個已經存在的物件的別名。一旦乙個物件初始化了這個引用,那麼名稱和引用都能夠用來引用該物件。int a 12 int ra a ra 是物件a 的乙個別名 ra 此時物件 a 11 a 10 ra 10 int pa ra pa 指標指向物件 a引用經常與指標混淆,可能是c 編譯器常常將引用像...