指针和 const 结合使用的一个问题

2023-10-17 17:26:20 +08:00
 huzhikuizainali

引自 c++程序设计语言 p162

char *const cp; //我的理 cp 是一个指向 char 类型的指针,一旦指定就不可更改,cp 中存储的地址不可更改( const 在此的作用)

char const* pc;

const char* pc2; //pc2 是一个指向 char 类型常量的指针,pc2 只能指向常量( const 在此发挥的作用)

书上对第二行的定义是“指向常量 const 的指针”,这我就不太明白了,const 算是一个关键字吧,怎么会有”常量 const”的概念? const 放在谁前面,就代表谁不可更改。

书中前一段还说不存在“形如 const *的声明运算符”,所以第二行代码究竟什么意思?

788 次点击
所在节点    C++
3 条回复
kobayashilin1
2023-10-17 18:12:12 +08:00
查看 C++ Primer 5e 相关部分对 const 的讲解,或者看这个视频也行: [ [C++] 一个视频彻底掌握 const] https://www.bilibili.com/video/BV1xY411t75L?vd_source=e0ed7548104f86445a2a6c8dcbe3cfc6
liberize
2023-10-17 19:02:02 +08:00
char *const cp; // const pointer 指针本身不能修改
const char* pc2; // pointer to const 指针指向的内容不能修改
Kare
2023-11-20 14:33:25 +08:00
C++ Primer 里有个建议,阅读这样的语句时从右往左看,看 const 先修饰谁。
如楼上举的例子,char * const cp 里面,const 修饰的是这个指针,就是它所指向的地址不能改(地址中存的内容随便改)。
const char* pc2 里面,const 修饰的是 char ,即指针指向的是一个常量 char ,就不能通过*pc2 修改这个常量 char 的值,但是可以让指针指向别处。
const char* const pc3 这种,就是指向常量 char 的常量指针,啥都不能改。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/982847

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX