C语言基础:指针常量和常量指针区别

2020-11-2209:39:57编程语言入门到精通Comments1,756 views字数 998阅读模式

学习C/C++的时候总是记不住指针常量(int * const p;)和常量指针(const int *p)的区别,最近再刷题的时候发现了一个评论,分分钟就可以记住这两者的形式和区别,下面分享一下如何记住和区分指针常量和常量指针。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/20732.html

C语言基础:指针常量和常量指针区别文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/20732.html

指针常量文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/20732.html

我们通常称之为指针常量的东西就是如下的这种形式:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/20732.html

int * const p;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/20732.html

首先说一下指针常量中const的作用是限制指针不可变,也就是说指针一旦初始化不可再更改,但是其指向对象的值是可变的,看下面的例子:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/20732.html

int a=10,b=20;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/20732.html

int* const p = &a;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/20732.html

*p = 15; //允许修改值文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/20732.html

cout<<*p;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/20732.html

p = &b; //报错,read-only variable 'p'文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/20732.html

常量指针文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/20732.html

C语言基础:指针常量和常量指针区别文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/20732.html

常量指针其实又两种书写形式,如下:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/20732.html

const int *p;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/20732.html

int const* p;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/20732.html

上面的两种书写形式是等价的,常量指针中const的作用和指针常量中互补,其限制的是常量不可变,也就是说指针初始化后可以修改其指向,但是无法修改对象的值,看下面的例子:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/20732.html

如果你在学习C/C++的过程中遇到了问题,可以来加入小编的企鹅圈问小编哦~小编很热情的(●’◡’●)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/20732.html

int a=10,b=20;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/20732.html

const int *p = &a;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/20732.html

p = &b; //允许修改指向文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/20732.html

*p = 15; //报错,不允许修改值文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/20732.html

指针常量:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/20732.html

int * const p;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/20732.html

观察一下其形式,发现*号在左,const在右,我们从左往右读,“*”号读作“指针”,“const”读作“常量”,所以总的读作:“指针常量”。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/20732.html

常量指针:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/20732.html

const int *p;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/20732.html

int const* p;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/20732.html

观察发现,常量指针中const 总是位于*号左侧,所以我们按照上面的方法依次从左往右读,合并起来就是“常量指针”。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/20732.html

我们只要记住const总是修饰左边就可以了,但是有一种特殊的情况就是const位于最左侧,此时const将修饰右边,看下面的例子:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/20732.html

C语言基础:指针常量和常量指针区别文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/20732.html

指针常量:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/20732.html

int * const p;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/20732.html

我们发现const的左侧是*号,我们就把*号读作指针,所以const限制的是指针。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/20732.html

常量指针:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/20732.html

const int *p;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/20732.html

const位于最左侧,所以修饰const的右边int所以修饰的是值不可变。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/20732.html

int const* p;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/20732.html

const左侧为int,所以和上面一样,值是不可变的。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/20732.html

读的时候,从左往右遇到“*”读指针,遇到“const”读常量。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/20732.html

判断限制域的时候,const总是修饰其左侧标识符,如果const位于最左侧则修饰其右侧标识符。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/20732.html

作者:毛橘DD
来源:掘金文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/20732.html

  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/ymba/20732.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定