C++指針理論知識(持續更新)

概述

指針是c++中重要的數據類型,它可以對指針指向的實際物理內存地址中的值進行讀/寫

示意圖如下
在這裏插入圖片描述

定義指針

指針變量的定義方法爲數據類型 *變量名稱

指針變量的讀/寫爲*指針變量該操作代表解引用,也就是訪問指針所指向地址的內存值

int a = 10; // 創建整數型變量a
int *ptrA = &a; // 創建整數型指針類型變量ptr且初始化值爲變量a的地址

取地址符

&是取地址符,它可以獲取某個變量所佔內存空間的內存首地址

指針大小及數據類型

指針的大小永遠只佔8(64位系統)或4(32位系統)字節

指針的數據類型則表示了這個指針指向的變量的數據類型,同時也代表指針指向內存的大小

int *ptrI = (int*)0x01;
// 這裏假設指針指向0x01首地址的控件,那麼這個指針所指向的內存空間就是0x01至0x04,因爲這個是int(4字節)類型的指針

空指針

我們可以將指針指向一個內存地址爲空的地址,通常這樣來作爲初始化,例如: int *prtI=nullprt;

野指針

野指針代表指針指向了一片沒有權限訪問的內存地址,並對這個內存地址進行操作,例如int *ptrI=(int*)0xFFFFFF;

常量

常量指針const int *ptrInt = &itInt;

常量指針不允許修改指針所指向的值,也就是說不可以執行*ptrInt=10的操作

指針常量int const *ptr = &itInt;

指針常量不允許修改指針的指向,也就是所不可以執行*ptr=&b的操作

指針與數組

數組的數組名稱其實是這個數組所佔的內存空間的內存首地址,換言之是數組首元素的內存地址

訪問數組元素

以下案例展示了指針訪問數組元素

int array[10] = {1,2,3,4,5,6,7,8,9,10}; // 定義一個數組,我們假設array數組首元素地址爲0x123
int *ptrArray = array; // 爲什麼不需要&符,因爲數組名稱就是數組元素的首地址,所以prtArray=0x123
p+1; // 指針移動int個字節到0x127,因爲數組是順序的所以這是數組的第二個元素的首地址,以此類推。。。
p-1; // 指針移動int個字節到0x119,這裏指針指向了數組之外的內存地址,屬於越界操作

引用

引用其實實質上就是指針的一種封裝,它代表對某一變量的引用,通常使用在參數的傳遞上

引用的格式爲int &引用名稱 = 被引用對象;

注意事項

  1. 引用必須要初始化,不可以int &refInt;這樣定義
  2. 初始化後不可以修改引用所指向的變量
// 案例
int a = 10; // 創建一個整數型變量a
int &refInt = a; // 創建一個引用對象,這個引用對象引用了變量a而不是a變量的副本,這裏可看成int *ptrInt = &a;
refInt = 100; // 變量a的值變爲100

引用做函數參數

在函數中我們可以將函數參數類型聲明爲引用類型,可以一定程度上代替指針

案例

void swapInt(int &a,int &b){
    // 這裏交換了a,b變量實際參數的值
    int tem = a;
    a=b;
    b=tem;
}
void main(){
    int a=0,b=1; // 創建a b兩變量
}
/**
我們看成swapInt(int *a,int *b),裏面對a的調用你可以看成(*a),正因爲所以值才被交換
**/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章