指針(pointer)與引用(reference)

const

const是常量的意思,被其修飾的變量不可修改
如果修飾的是類、結構體(的指針),放在數據類型(int)前後沒有區別,其成員也不可以更改
const修飾的是其右邊的內容
在這裏插入圖片描述
雖然p1不能修改指向,但是可以去修改值
在這裏插入圖片描述
在這裏插入圖片描述

指針(point)

在這裏插入圖片描述
看看彙編
在這裏插入圖片描述

ebp-18H是指針變量p的地址值
lea指針不需要知道單位(只是取地址),mov指令需要在前面+單位(說明取值)

引用(Reference)

在C語言中,使用指針(Pointer)可以間接獲取、修改某個變量的值
在C++中,使用引用(Reference)可以起到跟指針類似的功能

引用相當於是變量的別名(基本數據類型、枚舉、結構體、類、指針、數組等,都可以有引用)
對引用做計算,就是對引用所指向的變量做計算
在定義的時候就必須初始化,一旦指向了某個變量,就不可以再改變,不能像指針一樣在去引用其他變量
可以利用引用初始化另一個引用,相當於某個變量的多個別名
不存在【引用的引用、指向引用的指針、引用數組(如int &arr[3])】

** 引用存在的價值之一:比指針更安全、函數返回值可以被賦值**

因爲指針可以修改指向

在這裏插入圖片描述

例子:交換值

在這裏插入圖片描述
在這裏插入圖片描述
函數裏可以訪問外面的值,是對外面的值的操作,而不是僅僅針對函數內部
在這裏插入圖片描述

數據類型、枚舉、結構體、類、指針、數組的引用

&符號相當於是取地址
寫法:&符號左邊是什麼類型就是什麼引用,&符號右邊就是變量的別名=變量名
指針的引用
在這裏插入圖片描述
數組的引用
在這裏插入圖片描述
在這裏插入圖片描述

數組名就是數組首地址,因此可以看做是指向數組首地址的指針(int *)
int * &a=arr 但是arr是一個常量即數組首地址,所以要+個const

引用的本質

引用的本質就是指針,只是編譯器削弱了它的功能,所以引用就是弱化了的指針
一個引用佔用一個指針的大小(在cpu架構爲X64下是8字節,x86下是4字節)
不能用sizeof(引用名),這樣出來的是被引用的變量佔用的大小
在這裏插入圖片描述
在這裏插入圖片描述

常引用(Const Reference)

**定義:**引用可以被const修飾,這樣就無法通過引用修改數據了
const必須寫在&符號的左邊,才能算是常引用
在這裏插入圖片描述
在這裏插入圖片描述
const引用的特點
1.可以指向臨時數據(常量、表達式、函數返回值等)const int &a=30;
2.可以指向不同類型的數據

3.作爲函數參數時(此規則也適用於const指針)
✓可以接受const和非const實參(非const引用,只能接受非const實參)
✓可以跟非const引用構成重載
在這裏插入圖片描述
重載
在這裏插入圖片描述
◼當常引用指向了不同類型的數據時,會產生臨時變量,即引用指向的並不是初始化時的那個變量
在這裏插入圖片描述
看看彙編,就知道原因了
在這裏插入圖片描述
相同類型時的彙編
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章