* const ?

u013628777 2014-05-17 09:51:27

//a1.cc
int a=7;
int *const p=&a;



//a2.cc
int const a=7;
int *const p=&a;


为什么,a1.cc对。
a2.cc是错?
...全文
330 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
u013628777 2014-05-19
  • 打赏
  • 举报
回复
11楼,对!
u013628777 2014-05-19
  • 打赏
  • 举报
回复
《C++Primer》第四版 5.12.3 其他隐式转换 5 转换为const对象 非const对象,可以转换成为const对象。 反而,就不可以了。
傲世孤尘 2014-05-19
  • 打赏
  • 举报
回复
不好意思,上面说错了,具体是这样的: int const a=7; int *const p=&a; 这个的确错了,原因如下: a是一个常量,&a得到的是一个常量地址 int *const p=&a;这个语句声明的是这样一个指针:指针p不能被改变(即:不能让p重新指向另一个变量),但p指向的内容可以被改变(即:可以这样 *p=10;) 假设你成功的执行了这句: int *const p=&a; 那么依据你对指针变量p的定义,可以在后面这么干: *p=50; 问题是这样会修改a的值,但事实上a是一个常量,不允许被修改。 所以这样是不行的。 那么,看看下面一种方式: int const a=7; int const * p=&a; 这样写的意思是,p是一个指向常量的指针,p可以改变(重新指向另一个常量),但p指向的内容不能被改变。 这样就行了,不知道是否解决了你的疑问。
傲世孤尘 2014-05-19
  • 打赏
  • 举报
回复
不能对常量取地址
u013628777 2014-05-19
  • 打赏
  • 举报
回复
*const: 是个const指针,它的地址不变。 指向对象的值可变。 假设,右值是个const对象。它会尝试把const转换成非const。 转换不了。
u013628777 2014-05-19
  • 打赏
  • 举报
回复
这位: 那层楼呢?
zcdabing 2014-05-19
  • 打赏
  • 举报
回复
上个帖子都有回过你,不仔细看别人的回复,又来发帖
u013628777 2014-05-18
  • 打赏
  • 举报
回复
int *const p, 地址不变,指向对象可变。 为什么,a1.cc对。a2.cc错? 说说原因。
u013628777 2014-05-18
  • 打赏
  • 举报
回复
楼上: 一个const,在*前。 一个const,在*后。 怎可能是等价呢?
「已注销」 2014-05-18
  • 打赏
  • 举报
回复

//a2.cc
 int const a=7;
 int *const p=&a;//等价于 const int * p=&a,现在你知道为啥错了吧
Morrisss_ 2014-05-18
  • 打赏
  • 举报
回复
引用 18 楼 u013628777 的回复:
楼上各位: 这样规定(17楼),原理是什么?
指向常量的指针,重点不在它指向什么,更多的是偏向于不能通过它去修改所指向的内容。 常量指针,重点在于它指向不变,即初始化之后不能再更改指向,能不能修改所指内容还得看是不是属于指向常量的指针。 规定不是没有道理的,本身带有一定逻辑性才会被定义出来,我觉得11楼说的例子已经很明白了。
u013628777 2014-05-18
  • 打赏
  • 举报
回复
楼上各位: 这样规定(17楼),原理是什么?
u013628777 2014-05-18
  • 打赏
  • 举报
回复
《C++Primer》第四版 4.2.5 指针和const限定符 2 const指针 任何企图给const指针赋值的行为都会导致编译时的错误:curErr=curErr; 与任何const变量一样,const指针也必须在定义时初始化。 --------

int a=2;
int *const p=&a;
定义const指针时,初始化它,是对。

int a=2;
int *const p;
p=&a;
定义const指针后,再赋值它,是错。 书上只说了这些!
u013628777 2014-05-18
  • 打赏
  • 举报
回复
11楼: 反证法?
u013628777 2014-05-18
  • 打赏
  • 举报
回复
buyong: 这是谁规定?
u013628777 2014-05-18
  • 打赏
  • 举报
回复
buyong: a是常量,就不能指向它?
liminilove7 2014-05-18
  • 打赏
  • 举报
回复
我也疑惑了 为什么a1中p这个const pointer 可以指向一个not const pointer的&a.而 a2中的p这个const pointer 不可以指向同样是not const pointer的&a呢
PDD123 2014-05-18
  • 打赏
  • 举报
回复
在没有指针的情况下,const修饰的都是变量本身。 有指针的时候,const在*前,则说明指针指向的对象是不可变的。const在*后,则说明指针本身是不可变的。 似乎是和优先级有关,你直接死记硬背当成是规定就可以了
qq120848369 2014-05-18
  • 打赏
  • 举报
回复
到底是指针变量自己不可变还是指针变量指向的对象不可变,体会一下区别。
「已注销」 2014-05-18
  • 打赏
  • 举报
回复
引用 9 楼 u013628777 的回复:
楼上: 一个const,在*前。 一个const,在*后。 怎可能是等价呢?
恩,你说的在理,我看错了,上面回复希望能帮你解决问题
加载更多回复(6)

65,207

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧