【C++ 语言】引用 ( 引用简介 | 指针常量 | 常量指针 | 常引用 | 引用参数 | 引用 指针 对比 )
文章目錄
- I . 引用概念
- II . 引用聲明
- III . 引用 地址 內(nèi)存 分析
- IV . 常引用
- V . 引用作為參數(shù)
- VI . 引用 與 指針 對(duì)比
I . 引用概念
C++ 對(duì) C 擴(kuò)充 : 引用 ( Reference ) 概念 , 是 C++ 在 C 的基礎(chǔ)上進(jìn)行的擴(kuò)充 , 在 C 語(yǔ)言中是沒有引用的 ;
引用本質(zhì) : 引用的本質(zhì)就是為一個(gè)變量指定一個(gè)別名 , 這個(gè)別名與變量的使用方式是相同的 ;
II . 引用聲明
引用聲明 :
① 引用聲明格式 : 類型標(biāo)識(shí)符 &引用別名 = 目標(biāo)變量 ;
② 示例代碼 :
int a = 0; int &b = a;③ 引用標(biāo)識(shí) : 此處的 & 操作不是取地址運(yùn)算 , 只是起一個(gè)引用標(biāo)識(shí)的作用 ;
④ 類型標(biāo)識(shí)符 : int 是類型標(biāo)識(shí)符 , 注意引用的類型標(biāo)識(shí)符要與被引用的變量相同 ;
⑤ 初始化 : 聲明引用的同時(shí) , 必須進(jìn)行初始化 , 因?yàn)橐枚x的是一個(gè)變量的別名 , 這個(gè)變量必須在聲明的時(shí)候指定 ;
//引用相當(dāng)于常量指針 , 必須在聲明的時(shí)候就初始化 , 聲明完畢后初始化是無效的 , 編譯執(zhí)行會(huì)報(bào)錯(cuò) //錯(cuò)誤示例 , 引用聲明后必須馬上初始化 int a = 0; //聲明的時(shí)候必須初始化 , 此時(shí)的聲明時(shí)錯(cuò)誤的 int &b; //此時(shí)對(duì)引用進(jìn)行賦值就是錯(cuò)誤的 b = a;⑥ 引用使用 : 引用聲明后 , 該引用 b 與 a 是等價(jià)的 , 凡是可以使用 a 的地方都可以使用 b ;
注意 : 引用聲明完成之后 , 不能講該引用名稱再次聲明為其它變量的名稱 ;
III . 引用 地址 內(nèi)存 分析
int a = 0; int &b = a;
變量 與其 引用地址相同 : 對(duì) 變量 a 和 引用 b 取地址操作 , &a 與 &b 的值是相等的 ;
( 引用名稱 是 變量名稱 的一個(gè)別名 )
編譯器實(shí)現(xiàn) : 編譯器將引用實(shí)現(xiàn)為 int * const b 指針 , 其指針本身是常量 , 即存儲(chǔ)的地址是不可變的 , 指針指向的內(nèi)容是可變的 ;
( 既然引用是一個(gè) 指針常量 , 說明其還是需要占用內(nèi)存的 )
const 修飾指針規(guī)則 : 左數(shù) 右指 (const 在 * 左邊數(shù)據(jù)是常量, const 在 * 右邊指針是常量);
左數(shù) ( 常量指針 ) : const 出現(xiàn)在 * 左邊時(shí), 指針指向的數(shù)據(jù)為常量, 指向的數(shù)據(jù)不可改變;
右指 ( 指針常量 ) : const 出現(xiàn)在 * 右邊時(shí), 指針地址本身是常量, 指針地址不可改變;
指針常量 : 表示該指針本身是一個(gè)常量 ;
常量指針 : 表示指向一個(gè)常量的指針 ;
IV . 常引用
常引用 :
① 常引用簡(jiǎn)介 : 引用本身是一個(gè)常量指針 , 指針本身的地址不可改變 , 常引用 在常量指針的基礎(chǔ)上 , 將指向的數(shù)據(jù)也設(shè)置成常量 , 即不能通過該引用修改變量的值 ;
( 引用代表的地址不能修改 <引用自帶屬性> , 常引用 在引用的基礎(chǔ)上 , 指向的數(shù)據(jù)也不能修改 )
② 常引用聲明格式 : const 類型標(biāo)識(shí)符 &引用別名 = 目標(biāo)變量 ;
③ 示例代碼 :
int a = 0; const int &b = a;④ 等價(jià)說明 : 上述常引用 b 等價(jià)于 const * int * b , 即該常引用的引用本身 , 以及其代表的變量 , 都不能通過該引用進(jìn)行修改 ;
這里注意 , 不同通過引用進(jìn)行修改 , 但是可以通過變量名稱 a 進(jìn)行修改 ;
⑤ 作用及意義 : 使用 引用數(shù)據(jù)類型 作為 函數(shù)參數(shù) , 如果不需要在 函數(shù)中 修改該引用變量的值 ( 指針指向的數(shù)據(jù)的值 ) , 就將該參數(shù)聲明為常引用 , 這樣能最大限度增加安全性 , 避免因?yàn)檎`操作導(dǎo)致不必要的問題出現(xiàn) ;
V . 引用作為參數(shù)
C 語(yǔ)言中的參數(shù) 分類 :
① 普通變量參數(shù) : C 語(yǔ)言中 普通變量 ( 非指針變量 ) 作為參數(shù) , 只能進(jìn)行值傳遞 , 不能通過參數(shù)返回結(jié)果 ;
② 指針變量參數(shù) : C 語(yǔ)言中 , 如果要讓函數(shù)的參數(shù)可以將結(jié)果返回 , 則必須使用指針作為參數(shù) ;
C++ 中的引用參數(shù) : C++ 在 C 語(yǔ)言基礎(chǔ)上擴(kuò)展了 引用 數(shù)據(jù)類型 , 使用引用可以替代上面的指針作為參數(shù)的情況 , 使參數(shù)具有返回結(jié)果的能力 ;
作用及意義 :
① 具有返回值能力 : 使用引用作參數(shù) , 可以將參數(shù)當(dāng)做返回值使用 ;
② 提高參數(shù)傳遞效率 : 大型對(duì)象作參數(shù)時(shí) , 使用引用類型 , 可以提高參數(shù)傳遞效率 ;
VI . 引用 與 指針 對(duì)比
引用與指針的相同點(diǎn) : 都具有地址的概念 ;
① 指針 : 指針指向內(nèi)存中的一塊空間 , 指針變量的內(nèi)容是一個(gè)內(nèi)存地址 ;
② 引用 : 引用是變量的別名 , 即某塊內(nèi)存空間的別名 , 相當(dāng)于一個(gè) 指針常量 , 也指向一塊內(nèi)存空間 ;
引用與指針的不同點(diǎn) :
① 引用比指針更嚴(yán)格 :
引用在定義時(shí)必須被初始化 , 而且只能初始化這一次 , 相當(dāng)于 指針常量 ;
指針 是可變的 , 指針指向的地址 , 以及 地址中的數(shù)據(jù) 都是可變的 ;
引用的變量值內(nèi)容可變 , 變量的地址不可變 ;
② 是否可以為空 : 指針可以為空 , 但是引用必須不能為空 , 因其在聲明時(shí)必須進(jìn)行初始化操作 ;
③ sizeof 操作區(qū)別 : sizeof ( 引用 ) 獲取的是被引用的變量的大小 ( 隨變量類型變化 ) , sizeof ( 指針 ) 獲取的是指針變量本身的大小 ( 固定的 ) ;
④ 類型安全性 : 引用是類型安全的 , 指針類型不安全 , 引用比指針多了類型檢查機(jī)制 ;
總結(jié)
以上是生活随笔為你收集整理的【C++ 语言】引用 ( 引用简介 | 指针常量 | 常量指针 | 常引用 | 引用参数 | 引用 指针 对比 )的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Android 应用开发】Androi
- 下一篇: 【C++ 语言】智能指针 引入 ( 内存