关于const的问题

raullpq 2003-03-27 11:46:12
是c++ primer的题目:
a.int i = -1;
b.const int ic = i;
c.const int *pic = ⁣
d.int *const cpi = ⁣
e.const int *const cpic = ⁣
上面5个初始化我做出来是d编译不通过,其他都没有问题,只要把ic不要定义成const就通过了。可是为什么呢,难道就是因为d中只能cpi只能修改他所指向地址的值,而不能修改cpi指向其他地址???那如果这样的话e应该也不可以。可是偏偏e没有问题。能帮我解释一下吗???
...全文
69 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
raullpq 2003-03-27
  • 打赏
  • 举报
回复
呵呵,我明白了,谢谢了,可是这次我只有10分,因为我怕分数不够,所以才这样,不好意思了各位:)
Meyer 2003-03-27
  • 打赏
  • 举报
回复
d. int *const cpi = ⁣ //cpi 是常指针 而不是指向常量的指针,即指针本身是常量而指
针指向的对象不是常量 这里拿常量的地址去初始化这个不是指向常量的指针 故错

e. const int *const cpic = ⁣ //cpic 是 指向常量的常指针 即指针本身是常量而指
针指向的对象也是常量 故正确

区分: 用 '*' 作为界限 const 在'*'的左边 即 "const * " 表示指针指向的对象是常量
const 在'*'的右边 即 " * const" 表示 指针本身是常量他不能改变指向的对象,不能再初始化
后 int* const p = &initint //这个指针是常指针
p = &otherint //错 不能改变常指针指向的对象
Cybergate 2003-03-27
  • 打赏
  • 举报
回复
看定义.
int *const cpi表示cpi是一个常量, *右边表示cpi的类型, 左边表示指向数据的类型

指向常量的指针可以指向变量,反过来却不行. 这是有道理的. 假如你提供给用户一个常量, 不允许他修改. 后人家却用指向变量的指针来引用它, 然后通过变量指针来修改它, 你肯定会不肯, 对吧!

呵呵,给帖子加点分吧, 我还差几十分就5角了.
raullpq 2003-03-27
  • 打赏
  • 举报
回复
不明白,ic是常量啊为什么pic不能指向常量?我怎么知道什么是指向变量的指针,什么是指向常量的指针呢?
Cybergate 2003-03-27
  • 打赏
  • 举报
回复
有这么一个规定: 指向变量的指针不能用来指向常量, 而不管指针本身是否位常量
int *pc=&ic 是错的, 因为它只能指向一个变量,而不是一个常量, 但ic却是一个常量
同样 int *const cpi 也是错的, 虽然指针本身是常量, 但它指向的却是一个变量, ic是一个常量, 所以是错的

对于e, cpic指针本身是一个常量, 它指向的也是常量, 所以可以指向ic

70,020

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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