当前位置:百问九>生活百科>const int i=3; const int j=i; 可行吗,为什么书上说无效

const int i=3; const int j=i; 可行吗,为什么书上说无效

2023-06-30 20:20:57 编辑:zane 浏览量:561

const int i=3; const int j=i; 可行吗,为什么书上说无效

1)先从const int i说起。使用const修饰的i我们称之为符号常量。即,i不能在其他地方被重新赋值了。注意:const int i与int const i是等价的,相同的,即const与int的位置无所谓。2)const int *p看例子:int i1=30;int i2=40;const int *p=&i1p=&i2 //此处,p可以在任何时候重新赋值一个新的内存地址。i2=80; //这里能用*p=80来代替吗?答案是不能printf("%d",*p); //输出80分析:p的值是可以被修改的,即它可以重新指向另一个地址。但是不能通过*p来修改i2的值。首先,const修饰的是整个*p(注意,是*p而不是p),所以*p是常量,是不能被赋值的。虽然p所指的i2是变量而不是常量;其次,p前并没有用const修饰,所以p是指针变量。能被赋值重新指向另一个内存地址。3)int * const pint i1=30;int i2=40;int * const p=&i1//p=&i2 错误的。p不能再指向另一个新地址了。i1=80; //这里能用*p=80来代替,即可以通过*p修改i1的值。printf("%d",*p);分析:此时p的值不能被赋值修改了,只能永远指向初始化时候的内存地址。相反,可用*p修改i1的值了。所以:综上所述,指针p因为有了const的修饰,所以为指针常量,即,指针p不能修改了。整个*p前面没有const修饰,则*p为变宽旁量而不是常量,所以,可改变*p的值。如果const修饰在*p前则不能改的是*p,而不是指p;如果const是直接写在p前,则p不能改。4)补充const int i1=40;int *p;p=&i1 //提示碰哪错误,无法从const int转为int。----------------------------------------const int i1=40;const int *p;p=&i1慎吵橡 //两个类型相同,可以这样赋值。

版权声明:文章由 百问九 整理收集,来源于互联网或者用户投稿,如有侵权,请联系我们,我们会立即处理。如转载请保留本文链接:https://www.baiwen9.com/life/245099.html
热门文章
二维码