天天看點

C語言基礎知識分享:指針常量和常量指針差別

在學習C/C++的時候總是記不住指針常量(int * const p;)和常量指針(const int *p)的差別,最近再刷題的時候發現了一個評論,分分鐘就可以記住這兩者的形式和差別,下面分享一下如何記住和區分指針常量和常量指針。

C語言基礎知識分享:指針常量和常量指針差別

指針常量

我們通常稱之為指針常量的東西就是如下的這種形式:

int * const p;

首先說一下指針常量中const的作用是限制指針不可變,也就是說指針一旦初始化不可再更改,但是其指向對象的值是可變的,看下面的例子:

int a=10,b=20;

int* const p = &a;

*p = 15; //允許修改值

cout<<*p;

p = &b; //報錯,read-only variable 'p'

常量指針

C語言基礎知識分享:指針常量和常量指針差別

常量指針其實又兩種書寫形式,如下:

const int *p;

int const* p;

上面的兩種書寫形式是等價的,常量指針中const的作用和指針常量中互補,其限制的是常量不可變,也就是說指針初始化後可以修改其指向,但是無法修改對象的值,看下面的例子:

如果你在學習C/C++的過程中遇到了問題,可以來加入小編的企鵝圈問小編哦~小編很熱情的(●’◡’●)

int a=10,b=20;

const int *p = &a;

p = &b;   //允許修改指向

*p = 15;  //報錯,不允許修改值

指針常量:

int * const p;

觀察一下其形式,發現*号在左,const在右,我們從左往右讀,“*”号讀作“指針”,“const”讀作“常量”,是以總的讀作:“指針常量”。

常量指針:

const int *p;

int const* p;

觀察發現,常量指針中const 總是位于*号左側,是以我們按照上面的方法依次從左往右讀,合并起來就是“常量指針”。

我們隻要記住const總是修飾左邊就可以了,但是有一種特殊的情況就是const位于最左側,此時const将修飾右邊,看下面的例子:

C語言基礎知識分享:指針常量和常量指針差別

指針常量:

int * const p;

我們發現const的左側是*号,我們就把*号讀作指針,是以const限制的是指針。

常量指針:

const int *p;

const位于最左側,是以修飾const的右邊int是以修飾的是值不可變。

int const* p;

const左側為int,是以和上面一樣,值是不可變的。

讀的時候,從左往右遇到“*”讀指針,遇到“const”讀常量。

判斷限制域的時候,const總是修飾其左側辨別符,如果const位于最左側則修飾其右側辨別符。