C 常量指標,指標常量,指向常量的常指標詳解

2022-09-24 09:27:09 字數 2378 閱讀 8987

目錄

指標就是指向變數在記憶體中的位址

資料是存放在記憶體中的,每乙個變數都有乙個記憶體位址,假設是乙個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...