关于两个声明的异同点 内详

Jack_Yin 2009-10-20 10:05:08

const char* p1 = "Hello";
char* const p1 = "Hello";

上面两种声明,表示什么意思,有什么区别能,小弟初学,谢谢指教!
...全文
94 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jack_Yin 2009-10-21
  • 打赏
  • 举报
回复
多谢,明白了
hhhcj 2009-10-20
  • 打赏
  • 举报
回复
	char greeting[]="Hello World!";
const char* p1 = "Hello";//Hello存放的位置被标记为const,但指针p1不为常量
char* const p2 = "Hello";//指向Hello的指针p2被标记为const,
greeting[0]='J';
p1=greeting;//修改p1的值
//p2=greeting;//p2是常量,不能给一个常量赋值
cout<<p1<<endl;//Hello World!
whg01 2009-10-20
  • 打赏
  • 举报
回复
const char* p1 表示p1指向的内容不可以改变,但p1本身可以改变。
即:可以通过p1=NULL; p1+=100;等方式改变p1指向的地址,但不能*p1='a';p[1]='b';

char* const p1 表示p1本身不可以改变,但指向的内容可以改变。
即:p1=NULL; p1+=100;不可以,*p1='a';p[1]='b';可以。
slowgrace 2009-10-20
  • 打赏
  • 举报
回复
2楼正解。

补充说明,变量声明中的多个前缀修饰符相连时右边的优先级高、左边的优先级低,因此要从右向左解读。

比如:
const char* p1;
从右向左读,得到p1是个指针,指向const char

char* const p1;
从右向左读,得到p1是个常量指针,指向char
brookmill 2009-10-20
  • 打赏
  • 举报
回复
(const char)* p1 = "Hello";
p1是一个指针,它本身不是const,但是指向const char
所以,可以 p1="world",但是不能*p1='a'

char* (const p1) = "Hello";
p1是一个指针,它本身是const,指向char
所以,不能 p1="world",但是可以*p1='a'
illuminati 2009-10-20
  • 打赏
  • 举报
回复
第一个表示指针p1所指的具体内容不能改变。如*p1 = 1就是非法操作。
第二个表示指针不能指向其它值,如p1 = "abc"就是弹出错误

64,643

社区成员

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

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