1. 程式人生 > >C++之指針

C++之指針

類型轉換 str 間隔 form 如果 強制類型轉換 產生 補充 microsoft

C++中指針是一個很讓人頭疼的東西,指針指向這兒指向那兒很容易把人搞暈了。指針實現了對象的間接訪問,指針本身也是對象這點和引用不同,引用僅僅是對象的別名。指針可以在其生命周期內指向不同的對象(當然除了指針常量),另外指針無需在定義時賦值,指針也可以為空指針或者無效指針。

常用的定義方法如下:

int a=10;

Int *b=&a;//運用取地址運算符

註意:引用不是對象,沒有實際的地址,所以沒有指向引用的指針!

指針的值類型:

1.指向了一個對象;

2.指向緊鄰對象所占空間的下一個位置;

3.空指針;

4.無效指針;(不能對無效指針操作,後果無法預計)

利用指針訪問對象就是使用解引用運算符“*”,要註意的是解引用操作只能用於已經指向某個對象的指針

空指針的產生方法:

int* p1=nullptr;

int* p2=0;

int* p3=NULL;//包含頭文件cstdlib

註意:在使用指針的時候最好要進行初始化!

  對於指針的賦值中,難以區分的是指針的指向改變了,還是指針指向的對象改變了,很簡單的方法就是看“=”的左邊是指針還是其指向的對象,簡單點可以看其有沒有用解引用運算符“*”。對於兩個指針可以使用==和!=運算符來判斷是否指向了同一個對象,另外指針還可以進行“-”操作,當然在數組中才有意義,減操作能夠獲取到兩個對象之間索引的間隔,對兩個指針“+”、“*”、“/”的操作時沒有意義的。另外非空指針強制類型轉換布爾型為true。

  關於void*指針,該指針可以存放任何對象的地址,但是不能直接使用void* 指針,在使用void*之前必須要進行強制類型轉換已確定其指向的對象類型,才能進行相關的操作,簡單來說void*指針僅僅代表內存空間,對其內存中存放的對象類型根本不知道。

指針和數組名的區別:

  我們在使用數組的時候經常使用數組名來操作,且數組名代表了數組的首地址,感覺和指針的使用差不多,但其實數組名更包含的該數組的內存信息,指針僅僅是存放了一個地址。但需要註意的是,如果函數需要傳入數組來進行操作的化,不能只傳入數組名,因為編譯器會將其退化成一個指針,所以在需要對數組操作的時候,形參必須要包含數組首地址以及數組長度信息。

以上是目前對於C++中指針的總結,後續會繼續補充!

C++之指針