一、概述
在 C/C++ 中有两个概念,指针常量 int * const p
和 常量指针 const int *p (int const *p)
,下面分享一下如何区分指针常量和常量指针。
二、区别
2.1 指针常量 (限制的是指针,即指针不可指向其它地址)
指针常量的定义: int * const p;
说明: 指针常量的 *
号在左,const在右,从左往右读作“指针常量”。指针常量中 const 的作用是限制指针不可变,也就是说指针一旦初始化不可再更改,但是其指向对象的值是可变的。
示例如下:
int x=10;
int y=20;
int * const p = &x; // 此处的 p 是指针常量,因此指针指向的地址不可变。
*p = 30; // 可以修改修改值
p = &y; // 报错,read-only variable 'p'
2.2 常量指针 (限制的是指针指向的值,即指针指向的值不可变)
常量指针的定义: const int * p;
或 int const * p;
(两种写法等价)
说明: 常量指针中const 总是位于 *
号左侧,即从左往右读作“常量指针”。 常量指针中 const 的作用是限制常量不可变,即指针初始化后可以修改其指向,但是无法修改对象的值。
示例如下:
int x=10;
int y=20;
const int *p = &x;
p = &y; //允许修改指向
*p = 30; //报错,不允许修改值
小结: 当判断限制域时,const 总是修饰其左侧标识符,如果 const 位于最左侧则修饰其右侧标识符。