区别在哪里?问题本质是什么?

kkndciapp 2008-06-06 12:02:30
char* const ch="china"; //(指针常量)
cout < <ch < <endl;
*ch='g';
cout < <ch < <endl;
运行不出来
但是:如果我这样写:char p[]="china";
char *const ch=p;
*ch='g';
这样就可以,为什么呢?
...全文
70 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
kkndciapp 2008-06-06
  • 打赏
  • 举报
回复
常量的是指针啊,不是const char *ch啊
yuwei2589 2008-06-06
  • 打赏
  • 举报
回复
char* const ch="china"; //常量指针指向常量字符串
*ch='g'; //常量字符串不可更改
但是编译器却并不会发现该赋值有什么语法错误。在运行时,却会出现问题。


下面的
char p[]="china";
char *const ch=p; //常量指针指向数组p(p相当为一指针变量)
*ch='g'; //变量却可以被重新赋值
xuefey 2008-06-06
  • 打赏
  • 举报
回复
常量是不可以更改的。但常量指针指向的是变量,所以可以更改
yyyapple 2008-06-06
  • 打赏
  • 举报
回复
char* const ch="china"; //(指针常量) 
cout < <ch < <endl;
*ch='g';
cout < <ch < <endl;
运行不出来

"china"为字符串常量,存储在数据段中(代码是存储在代码段的)为只读区域,不可以更改;
char p[]="china"; 
char *const ch=p;
*ch='g'
;
p已经在堆栈中申请了空间并把字符串"china"拷贝到数组中,所以可以进行更改。
maplewasp 2008-06-06
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 NesTa_xP 的回复:]
char *ch="china";
你说ch是不是指向的字符串常量??
[/Quote]
同意!"china"为字符串常量,存储在只读数据区,是不可以更改的。
不管你用char *ch="china";还是char * const ch="china";
*ch都是不能被改变的。
NesTa_xP 2008-06-06
  • 打赏
  • 举报
回复
char *ch="china";
你说ch是不是指向的字符串常量??

64,649

社区成员

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

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