C++ 定义指针时const在不同位置处的作用

1.两个约定

  • const只是修饰作用,修饰的对象遵循默认修饰左边的对象,若左边无对象,则修饰右边对象

  • 声明一级指针时含有const,无非两种情况:不能改变指针的指向不能通过指针修改指向的内容

根据上述约定:

(1)const int *p

const修饰int,即不能通过指针修改指向的内容。

(2)int const *p

const修饰int,即不能通过指针修改指向的内容。

(3)int * const p

const修饰指针p,即p的指向不能改变。

(4)int const * const p

第一个const修饰int,即不能通过指针修改指向的内容;

第二个const修饰指针p,即p的指向不能改变。

(5)const int * const p

第一个const修饰int,即不能通过指针修改指向的内容;

第二个const修饰指针p,即p的指向不能改变。

2.解释

上述,1和2等价,4和5等价。

const int *p 或 int const *p

int a = 1,b=3;
const int *p = &a;
*p = 3;//错误,不能通过p修改指向的内容
p = &b;//正确,可以修改p的指向

int * const p

int a = 1, b = 2;
int * const p = &a;
*p = 0;//正确,可以通过指针p修改指向的内容
p = &b;//错误,不可以修改p的指向

int const * const p 或 const int * const p

int a = 1, b = 2;
int const * const p = &a;
*p = 0;//错误,不能通过p修改指向的内容
p = &b;//错误,不能修改p的指向

3.注

​ 严格意义上来说,类型只有int、short、float等,而没有const int、const short、const float等。

​ 一些说法,比如const int *p解释为,p是指向const int类型的指针或者p是指向常量整型的指针,均不太正确。

​ 持这种说法的人认为const int *p=&a;那么a必定是这样定义的:const int a=0;,上述的第一段代码就已经证明,a的定义int a = 1;是完全没有问题的。

​ 还是那句话,类型是int类型,const是修饰作用,这里仅仅是说不能通过p来修改指向的内容,即不能通过p来修改a的值,至于a的值本身能不能被修改(定义时是否有const修饰),并不是这个const所决定的

​ 另外,上述int * const p对应的代码中,定义a时不能是const int a = 1,这是因为int * const p=&a;说明是可以通过p修改a的值的,但a的定义本身是不允许a被修改,这就产生了冲突。

4.参考

C++里 const int* 与 int const* 有什么区别? - 知乎

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HHT0506

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值