V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
huzhikuizainali
V2EX  ›  C++

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

  •  
  •   huzhikuizainali · 2023-10-17 17:26:20 +08:00 · 769 次点击
    这是一个创建于 405 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    char const* pc;

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

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

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

    kobayashilin1
        1
    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
        2
    liberize  
       2023-10-17 19:02:02 +08:00 via Android
    char *const cp; // const pointer 指针本身不能修改
    const char* pc2; // pointer to const 指针指向的内容不能修改
    Kare
        3
    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 的常量指针,啥都不能改。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4098 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 10:18 · PVG 18:18 · LAX 02:18 · JFK 05:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.