目錄
指標就是指向變數在記憶體中的位址
資料是存放在記憶體中的,每乙個變數都有乙個記憶體位址,假設是乙個int型別變數a,佔4個位元組的記憶體區,那麼在記憶體中如果是小端方式儲存,我們建立指標p,把a的位址賦值給p,就是把a的首位址0x1100賦值給指標p,這個時候p的值就是變數a在記憶體中的首位址
int a =10;
int*p;
p=&a; //把a的首位址賦值給p
也就是說指標的值是這塊記憶體區域的首位址
記憶體是乙個很大的,線性的位元組陣列,每乙個位元組都是固定8個二進位制位組成,計算機對每個記憶體單元都進行了編號,這個編號就稱為記憶體位址,位址決定了記憶體單元在記憶體中的位置
在32位系統中,處理器一次能處理的最大位數是2的32次方 ,也就是一次處理4個位元組的記憶體資料,哪麼指標的長度也就是4個位元組。
在64位系統中,處理器一次能處理的最大位數是2的64次方 ,也就是一次處理8個位元組的記憶體資料,哪麼指標的長度也就是8個位元組。
32位系統指標4個位元組 64位系統8個位元組
const 是 constant 的縮寫,本意是不變的,不易改變的意思
也就是說使用const修飾的變數,其值是不允許改變的
const int a = 7;
int b = a; // 正確
a = 8; // 錯誤,不能改變
在了解了上面的基礎知識之後,我們來看一下什麼是指標常量,常量指標和指向常量的指標
首先說一下怎麼快速的記住他們的區別,只需要按照命名的順序來讀,就可以很好地記憶
比方說:
int * const p =&a;
首先是乙個指標int * , 然後乙個const常量 那麼p就是指標常量
const int *p=&a;
首先是乙個const常量, 然後乙個指標int * 那麼p就是常量指標
是不是很好記憶
int * const p =&a;
特點:指標的指向不可以修改,指標指向的記憶體的值可以修改
因為const的功能就是限定不可以修改,所以我們看到指標常量是先有了int *指標,再有的const修飾p 所以p的值(指向的記憶體位址) 是不可以修改的
也就是const限制的是指標p的值,但是沒有限定p指向的記憶體位址裡的資料,所以記憶體的資料可以修改
舉例:int a=10;
int * const p =&a; //定義指標常量程式設計客棧,指向int a的位址
*p = 20; //正確,指向的記憶體位址中的資料可以修改
p=&b; //錯誤,指向的記憶體位址不可以修改程式設計客棧
箭頭是指標指向的記憶體值,是不可以修改的,但是指向的記憶體位址中的資料可以修改
const int *p=&a;
特點: 指標的指向可以修改,但是指標指向的值不可以修改。
常量指標,首先要是常量。就是指向的值要是乙個常量,但是指向的記憶體位址不做限制
int a=10;
int b=10;
const int *p=&a; //定義常量www.cppcns.com指標,指向int a的位址
*p = 20; //錯誤,指向的記憶體位址中的資料不可以修改
p=&b; //正確,指向的記憶體位址可以修改
箭頭是指標指向的記憶體值,是可以修改的,但是指向的記憶體位址中的資料要和之前的一致
const int const *p=&a;
特點: 指標的指向不可以修改,指標指向的值也不可以修改。
兩個const限制,一旦指向之後就不可以做修改了
int a=10;
int b=10;
const int const *p=&a; //定義指標常量,指向int a的位址
*p = 20; fzxt**l//錯誤,指向的記憶體位址中的資料不可以修改
p=&b; //錯誤,指向的記憶體位址不可以修改
空指標就是指向位址為空的指標
注意:空指標指向的記憶體是不可以訪問的
//-------空指標-------//
int *p4 = null;
//cout << *p4 << endl; //執行error,使用指標時必須先判斷是否空指標
野指標是指標指向了乙個隨意的內www.cppcns.com存位址,如果使用,會造成不可預知的記憶體錯誤
//-------野指標(懸浮、迷途指標)-------//
int *p5 =0x1100; //任意賦值的野指標
//cout << *p5 << endl; //執行error
int *p6 = new int(5);
delete p6; //刪除p6的指向
p6 = null; //一定要有這一步,否則p6會隨機的指向乙個位址
本文標題: c++常量指標,指標常量,指向常量的常指標詳解
本文位址:
C 常量指標 指向常量的指標
常量指標 我們可以將指標宣告為常量指標,這樣指標是不可以改變的,但是指標指向的內容是可以改變。指標中儲存的位址是不可變的 include using namespace std class a void set int x private int i int main 指向常量的指標 我們定義乙個指...
指向常量的常量指標
在課本上看到乙個很繞的概念,指向常量的常量指標,很容易弄混 include pch.h include using namespace std intmain 程式執行結果是輸出 0 指標的值是可變的,指向了乙個不可變的常量。include pch.h include using namespace...
c 常量指標與指向常量的指標
這是兩個初學者容易混淆的概念。比如,t pt new t const t pct pt 指向常量 const t 的指標 t const cpt pt 常量指標,指向t 不過使用乙個引用比使用乙個常量指標更簡單 const t rct pt 不用const t const t rt pt 不用t c...