1.指針常量
從字面意思可以看出,指針是一個常量,也就是地址不能被修改。
int* —— const p
特點是指針指向的數值可以改變,然而指針所保存的地址卻不可以改變。
#include <iostream>
using namespace std;
void main()
{
int a = 10;
int const *p = &a;
cout<<a<<endl;
cout<<*p<<endl;
int b = 20;
}
我們可以改變指針變量p所指向的內容,而不能改變p的地址空間,如 添加上p = &b;我們就會發現編譯錯誤!
2.指向常量的指針
const ——int*p
特點是指針所保存的地址可以改變,然而指針所指向的值卻不可以改變。同理,當添加*p = b時,會發生編譯錯誤!
3.指向常量的常指針
const int const*p
特點是指針所保存的地址不可變,指針所指向的數值也不可變
4.空指針
顧名思義,就是保存地址為空的指針
int *p=0; //此時的指針p就是一個空指針
5.內存泄露
int *p=new int;
p=new int;
delete p; //用delete來釋放剛剛申請的那塊內存區域,注意此時指針p還是可能依舊指向的這塊區域(注意可能二字)。
這樣就會有內存丟失,也就是所謂的內存泄漏。
因為第一行我們在堆中申請了一塊int型的區域,並且用指針p指向該空間。但是緊接着我們又在堆中申請了一塊int型的區域,用p指向了該空間。
那么先前申請的那塊區域就無法訪問了,但同時這塊無法訪問的區域沒有被刪除。所以就造成了內存泄漏。
6.迷途指針
int *p=new int; //在堆中申請一塊區域,用p指向這塊區域
所以此時指針p的指向地址具有不確定性,故而稱作迷途指針,避免的方法是將指針初始化為空指針。