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