关于const char* 与 char*的问题

dustdone 2016-11-20 02:30:17
char *p = new char('p');
const char *cp = "p";

cp = p; // 正确

*cp = ‘c’; // 错误
*p = ‘c’; // 正确


const char *cp 表示一个指向有const限定的char的指针。
char *p 表示一个指向char的指针。

因为cp与p指向的类型相容,并且左边指针指向的类型具有右边指针指向类型的全部限定符,所以可以把p的值赋给cp。
因为cp指向的目标是不允许修改的,所以*cp = 'c'; 报错。
问题来了,p指向的目标和cp指向的目标相同,换句话讲,p指向的目标就是cp指向的目标,那么p指向的目标可以被修改,也就是说cp指向的目标可以被修改了?如果这个逻辑没错,为何*cp='c' 会报错呢?
这个地方一直没有搞明白,还请明白的大侠指点一下,多谢了~~
...全文
352 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
paschen 2016-11-20
  • 打赏
  • 举报
回复
引用
问题来了,p指向的目标和cp指向的目标相同,换句话讲,p指向的目标就是cp指向的目标,那么p指向的目标可以被修改,也就是说cp指向的目标可以被修改了?如果这个逻辑没错,为何*cp='c' 会报错呢?
const char* 指向的地址不能去修改,但不表示其只能指向不能被修改的内存地址,也不表示他指向的内存一定要是不能修改的
ck2333 2016-11-20
  • 打赏
  • 举报
回复
cp是常量,所以不能够通过cp来改变其地址值。
ck2333 2016-11-20
  • 打赏
  • 举报
回复
p没有限制,所以可以通过p来改变其地址值。
ck2333 2016-11-20
  • 打赏
  • 举报
回复
const表示的是常量,意思就是只能够读,不能够写。
fefe82 2016-11-20
  • 打赏
  • 举报
回复
允许通过 p 改,但是不允许通过 cp 来改。

69,371

社区成员

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

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