C++之指針
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++之指針