引用與指標的區別
說起引用和指標,相信大多數人都或多或少的有些許疑問吧,小編來給大家小解一下,講的不好請使勁拍磚,小編承受能力極強,不信你試試。
先談一下為什麼有了高效的指標還要引入引用呢?
有過學C語言的同學都知道指標的重要性,它高效靈活,但是實物都有兩面性,高效靈活則意味著容易出錯。對於一個指標,它所指向的物件是靈活的,他可以指向任何一個與它型別相匹配的物件,這一刻它指向物件1,下一刻就有可能指向另一個物件2,這就容易引發安全隱患,如將一個自己定義的指標指向一個系統物件,一旦你對該指標進行操作,就有可能引起系統崩潰,還有就是野指標和未初始化的指標都有安全隱患,為了解決在一定程度上彌補指標的缺點,就引入了指標,注意引用這一概念在C語言中使沒有的,在C++、C#中有,其它語言有沒有小編就不清楚了。
引用:在實際程式設計中引用主要用做函式的形式引數,它其實就是一個物件的別名,它在定義的時候必須要初始化,這一點與實際生活中給小夥伴起外號是一樣的,你是看人(相當於物件)來起外號(相當於引用),而不是先想外號再找人,並且一旦初始化之後,該引用就只能指向所關聯的物件了,不能再指向其它物件了,就像現實中的你只能有一個合法老婆一樣,對引用的所有操作都相當於對所關聯物件本身的操作。其中const 引用需要你關注。
對於非const引用,用於初始化引用的必須是一個與該引用同型別的物件,不能是一個常量
int a;
int &s=a; //ok
int &j=12; //error
對於const引用,則可以繫結到不同但相關的型別的物件或繫結到右值。
繫結到右值的情況如下:
int i=43;
const int &r=43; //合法
const int &r2=r+i; //合法
繫結到相關型別的物件如下:
double dval=3.14;
const int &ri=dval; //合法
其實編譯器會把上述程式碼轉換成如下形式的編碼:
int temp=dval; //建立一個臨時的變數
const int &ri=temp; //其實繫結到了一個臨時變數物件上,對ri 的操作不會改變dval
指標:指標實際就是地址,是標識一塊記憶體的一個標識,通過這個標識可以對所指向的記憶體中的資料進行操作,指標儲存在對應型別的指標變數中,注意野指標和未初始化的指標會帶來安全隱患,養成良好習慣,定義指標變數時要對其初始化。指標的用處用很多,需要多加學習。
總結一下指標與引用的區別:
1、引用定義的時候必須初始化,而指標不是必須的,但習慣上要進行初始化
2、引用一旦初始化之後,就只能指向初始化的物件,不能再另指向其他物件了,但指標可以
3、都可以通過自身來直接操作指向的物件
相關文章
- 指標和引用的區別指標
- golang中 值型別,指標,引用的區別Golang型別指標
- C/C++引用和指標的聯絡和區別C++指標
- 指標常量和常量指標的區別指標
- 2020-12-6(從反彙編理解指標和引用的區別)指標
- java中的引用與c中的指標Java指標
- 物件與物件引用的區別物件
- c++中指標和引用的區別?C++指標
- 詳解c++指標的指標和指標的引用C++指標
- 值型別與引用型別的區別型別
- 陣列地址與指標之間的區別與聯絡陣列指標
- 【C++系列】指標物件和物件指標的區別C++指標物件
- 智慧指標和普通指標的區別指標
- C++中const與指標、引用的總結C++指標
- Go: 指標方法與值方法<->指標型別與值型別Go指標型別
- 1.0 - 指標和引用指標
- go 方法接受者 是指標型別和非指標型別的 區別Go指標型別
- 引用的底層為指標指標
- Go高階特性 13 | 引數傳遞:值、引用及指標之間的區別?Go指標
- C++中傳指標和傳引用的區別,各自的使用場景是什麼C++指標
- c++指標傳遞與引用傳遞C++指標
- Golang 學習——陣列指標和指標陣列的區別Golang陣列指標
- 指向指標的常量引用瞭解指標
- All I know about A/B Test (1) : 均值型指標與比值(率)型指標的計算區別指標
- 字串指標與字元陣列的區別--字串常量的值不能改字串指標字元陣列
- c++ 類的函式引用 指標C++函式指標
- java的引用:用C++/C的引用和指標去理解JavaC++指標
- Java中方法引用與Lambda區別 - foojayJava
- GO切片傳值/引用/指標Go指標
- 透過指標引用陣列指標陣列
- 第 10 節:複合型別-5. 指標 -- 指標與指標變數 -8. 多級指標型別指標變數
- require和import引用的區別UIImport
- Golang指標隱式間接引用Golang指標
- 關於引用(python中的偽指標)的理解Python指標
- 強引用、軟引用、弱引用、幻象引用有什麼區別?
- 指標還沒弄清楚?一篇文章搞定 “地址、指標、指標的指標、引用”,並附程式碼示例,建議收藏!指標
- c#中值型別和引用型別的區別C#型別
- Git tag標籤與branch分支的區別Git
- 商標與智慧財產權的區別