C 特殊的「別名」引用

2021-10-06 10:49:05 字數 2507 閱讀 6705

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

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

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

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

例項:

#include

#include

intmain

(void

)

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

例項:

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

intmain()

//結論:請不要用c的語法考慮 b=11

普通引用在宣告時必須用其它的變數進行初始化,引用作為函式引數宣告時不進行初始化。

例項:

#include

#include

void

swap

(int a,

int b)

//方式一,使用指標

void

swaq1

(int

*a,int

*b)//方式二,使用引用

void

swaq2

(int

&a,int

&b)int

main

(void

)

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

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

例項:

#include

#include

intswap

(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

(void

)

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

type& name <-- -->type* const name

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

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

例項:

#include

#include

void

func

(int

&var)

void

func

(int

*const var)

intmain

(void

)

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

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

例項:

#include

#include

void

boy_home

(int

**meipo)

void

boy_home1

(int

*&meipo)

intmain

(void

)

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

語法: const type& name = var;

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

分兩種情況:

用變數初始化常引用

用字面量初始化常量引用

例項:

#include

#include

intmain

(void

)

1)const & int e 相當於 const int * const e

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

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

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

這是我第一次寫部落格效果可能不是很好,但是我以後會加油的。

以上是上課時做的筆記,我個人認為寫的還不錯所以才發布的。

特殊的「別名」 引用 詳解

引用專題 變數名回顧 變數名實質上是一段連續儲存空間的別名,是乙個標號 門牌號 程式中通過變數來申請並命名記憶體空間 通過變數的名字可以使用儲存空間 問題 1 對一段連續的記憶體空間只能取乙個別名嗎?a 在c 中新增加了引用的概念 b 引用可以看作乙個 已定義變數 的別名 c 引用的語法 type ...

c語言 引用(變數的別名)

int a 10 int b a 引用 必須在定義的時候初始化,無空引用,且引用不分等級。指標 指向具體的記憶體空間,是間接訪問變數,指標自身消耗記憶體空間 其指向 可變的 除非用了const 不一定存在,如空指標null 引用 不用分配記憶體區域 引用 別名而已 的位址其實就是被引用物件的位址 必...

引用 變數的別名

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...