中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++中什么是指針

發布時間:2022-03-04 15:05:42 來源:億速云 閱讀:152 作者:小新 欄目:開發技術

這篇文章將為大家詳細講解有關C++中什么是指針,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

什么是指針

指針就是指向變量在內存中的地址

數據是存放在內存中的,每一個變量都有一個內存地址,假設是一個int類型變量a,占4個字節的內存區,那么在內存中如果是小端方式存儲,我們創建指針p,把a的地址賦值給p,就是把a的首地址0x1100賦值給指針p,這個時候p的值就是變量a在內存中的首地址

int a =10;
int*p;
p=&a; //把a的首地址賦值給P

也就是說指針的值是這塊內存區域的首地址

C++中什么是指針

內存地址

內存是一個很大的,線性的字節數組,每一個字節都是固定8個二進制位組成,計算機對每個內存單元都進行了編號,這個編號就稱為內存地址,地址決定了內存單元在內存中的位置

指針所占內存

32位系統中,處理器一次能處理的最大位數是2的32次方 ,也就是一次處理4個字節的內存數據,哪么指針的長度也就是4個字節。

64位系統中,處理器一次能處理的最大位數是2的64次方 ,也就是一次處理8個字節的內存數據,哪么指針的長度也就是8個字節。

32位系統指針4個字節 64位系統8個字節

const 變量

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;  //錯誤,指向的內存地址不可以修改

箭頭是指針指向的內存值,是不可以修改的,但是指向的內存地址中的數據可以修改

C++中什么是指針

常量指針

const int *p=&a;

特點: 指針的指向可以修改,但是指針指向的值不可以修改。

常量指針,首先要是常量。就是指向的值要是一個常量,但是指向的內存地址不做限制

int a=10;
int b=10;
const int *p=&a;  //定義常量指針,指向int a的地址
*p = 20; //錯誤,指向的內存地址中的數據不可以修改   
p=&b;  //正確,指向的內存地址可以修改

箭頭是指針指向的內存值,是可以修改的,但是指向的內存地址中的數據要和之前的一致

C++中什么是指針

指向常量的常指針

const int const *p=&a;

特點: 指針的指向不可以修改,指針指向的值也不可以修改。

兩個const限制,一旦指向之后就不可以做修改了

int a=10;
int b=10;
const int const *p=&a;  //定義指針常量,指向int a的地址
*p = 20; //錯誤,指向的內存地址中的數據不可以修改   
 p=&b;  //錯誤,指向的內存地址不可以修改

C++中什么是指針

空指針、野指針

空指針就是指向地址為空的指針

注意:空指針指向的內存是不可以訪問的

//-------空指針-------//
int *p4 = NULL;
//cout << *p4 << endl; //運行Error,使用指針時必須先判斷是否空指針

野指針是指針指向了一個隨意的內存地址,如果使用,會造成不可預知的內存錯誤

//-------野指針(懸浮、迷途指針)-------//
int *p5 =0x1100;  //任意賦值的野指針
//cout << *p5 << endl; //運行Error
int *p6 = new int(5);
delete p6;  //刪除p6的指向
p6 = NULL; //一定要有這一步,否則p6會隨機的指向一個地址

關于“C++中什么是指針”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

威海市| 广安市| 莱州市| 墨江| 视频| 乌什县| 万盛区| 抚远县| 米脂县| 平和县| 哈密市| 焦作市| 阿拉尔市| 景东| 临城县| 西林县| 额济纳旗| 石棉县| 元朗区| 鄂尔多斯市| 九江县| 云南省| 永寿县| 通辽市| 景宁| 武山县| 金秀| 兴义市| 邵阳县| 张家界市| 惠来县| 永春县| 广灵县| 离岛区| 襄樊市| 怀宁县| 靖州| 汝州市| 临猗县| 宜州市| 二连浩特市|