C 零基礎(02) 引用型別

2021-09-27 13:18:17 字數 3015 閱讀 9872

引用是c++相對於c擴充套件的一種型別,其作用是為某個變數定義乙個別名

則,通過原變數別名都能操作該對應的記憶體資料。

datatype &ref_name = origin_name;
datatype是資料型別,與origin_name變數的型別一致;ref_name是引用的變數名(別名),origin_name是被引用的變數名(原名稱);

如:

int a =10;

int&a1 = a;

// 引用,a1為a的別名

以上定義後,a1為a的別名,意味著,對a1的操作等同於對a的操作,反之亦然。如:

cout <<

"a:"

<< a << endl;

cout <<

"a1:"

<< a1 << endl;

a1 =20;

cout <<

"a:"

<< a << endl;

cout <<

"a1:"

<< a1 << endl;

終端輸出為:

a:10

a1:10

a:20

a1:20

int

&a1;

// error:declaration of reference variable 'a1' requires an initializer

先看引用變數的記憶體位址。

int a =10;

int&a1 = a;

// 引用,a1為a的別名

// 輸出 a和a1的記憶體位址

cout <<

&a <<

", "

<<

&a1 << endl;

終端列印:0x7ffeefbff5ec, 0x7ffeefbff5ec

可以看出,a和a1兩個變數都是「指向」同乙個位址的;這樣就能解釋為什麼對a或a1進行操作,能影響另乙個。

引用的本質實際上是指標的封裝

是乙個指向原變數記憶體位址的指標,封裝了內部實現,使用起來相較指標而言更為簡單。

因為引用是別名的這一特質,在引數傳遞過程中,可以提高速度減少記憶體開銷;同時函式內部也可以修改實參

datatype functionname(datatype ¶m, …)

例:定義swap函式,實現兩個值的交換

void

swap

(int

&a,int

&b)int

main()

終端輸出:

a:10

b:20

a:20

b:10

交換實參的值,是對引用傳遞比較經典的例子,那如果在函式內部不需要修改實參的值,那形參定義為引用或普通變數的區別又是什麼呢?

形參為普通變數:

void

funshowstudent1

(student s)

形參為引用變數:

void

funshowstudent2

(student &s)

main函式中呼叫:

int

main()

終端輸出:

姓名:binson

年齡:24

身高:172.5

體重:68.8

姓名:binson

年齡:24

身高:172.5

體重:68.8

觀察可得知,普通型別形參的位址不同於實參變數的位址;所以funshowstudent1函式在呼叫過程中,形參需開闢新的記憶體存放資料。而引用變數使用實參同乙個記憶體。

如果涉及到深拷貝情況更複雜,在後續章節記錄。

因為在函式內部不需要對實參進行修改,所以形參使用常引用進行傳遞,提高安全性。

如下:const student &s

void

funshowstudent

(const student &s)

datatype&functionname(…)

例:

int

&funexample2()

大寫的錯誤:不能返回區域性變數的引用。這個錯誤編譯時只會報警告,在執行時會程式奔潰。

不能返回區域性變數的引用,但可以返回,靜態變數,全域性變數的引用。如:

int

&funexample3()

在main函式中呼叫:

int

&res =

funexample3()

;cout << res << endl;

本文示例**

C 核心程式設計 02 引用

作用 給變數起別名 語法 資料型別 別名 原名 示例 include using namespace std intmain 示例 include using namespace std intmain 作用 函式傳參時,可以利用引用的技術讓形參修飾實參 優點 可以簡化指標修改實參 示例 inclu...

C 基礎(05) 引用

1 引用就是給變數起乙個別名。其本質就是乙個指標常量 指標指向的位址不可以修改 int a 10 b 是a的別名。b和a所訪問的記憶體是相同的 int b a 2 注意事項 3 引用作為函式的引數 1 函式的引數傳遞可以為 值傳遞 位址傳遞 引用傳遞。其中值傳遞不會改變原來的變數內容,其相當於將原來...

5 0 引用型別

ecmascript中有5中簡單資料型別 也叫基本資料型別 undefined boolean null number string。還有一種複雜資料型別 object object本質上是一組無序的明值対組成的 1 應用型別的值 物件 是引用型別的乙個例項。2 在es種,引用型別是一種資料結構,用...