关于const修饰谁的问题

const 关键字修饰的是它左边的东西;如果 const 的左边没有任何东西(即 const 出现在声明的最开始),那么它就修饰右边的东西。
用这个规则来检验一下:

  1. const char * p
    const 的左边是什么?没有东西。
    那么它就修饰右边的东西,右边是 char。
    结论:char 是常量。所以 p 是一个“指向常量字符的指针”。
    *p (内容) 不可改。
    p (指针) 可改。
  2. char * const p
    const 的左边是什么?是 * (指针)。
    那么它就修饰 * (指针)。
    结论:* (指针) 是常量。所以 p 是一个“常量指针”。
    p (指针) 不可改。
    *p (内容) 可改。
    一个有趣的补充:char const * p
    分析这个不那么常见的写法:
    const 的左边是什么?是 char。
    那么它就修饰 char。
    结论:char 是常量。所以 p 是一个“指向常量字符的指针”。
    你会发现,char const * p 和 const char * p 的分析结果完全一样!事实上,在 C/C++ 中,这两种写法是完全等价的。你的这个记忆法完美地解释了这一点。
    总结
    “const 找它左边的,如果没有就找它右边第一个”简单、直观,而且在所有情况下都是准确的。
posted @ 2025-06-08 10:12  哒令,哒哒哒哒哒~令  阅读(17)  评论(0)    收藏  举报