关于const修饰谁的问题
const 关键字修饰的是它左边的东西;如果 const 的左边没有任何东西(即 const 出现在声明的最开始),那么它就修饰右边的东西。
用这个规则来检验一下:
- const char * p
const 的左边是什么?没有东西。
那么它就修饰右边的东西,右边是 char。
结论:char 是常量。所以 p 是一个“指向常量字符的指针”。
*p (内容) 不可改。
p (指针) 可改。 - char * const p
const 的左边是什么?是 * (指针)。
那么它就修饰 * (指针)。
结论:* (指针) 是常量。所以 p 是一个“常量指针”。
p (指针) 不可改。
*p (内容) 可改。
一个有趣的补充:char const * p
分析这个不那么常见的写法:
const 的左边是什么?是 char。
那么它就修饰 char。
结论:char 是常量。所以 p 是一个“指向常量字符的指针”。
你会发现,char const * p 和 const char * p 的分析结果完全一样!事实上,在 C/C++ 中,这两种写法是完全等价的。你的这个记忆法完美地解释了这一点。
总结
“const 找它左边的,如果没有就找它右边第一个”简单、直观,而且在所有情况下都是准确的。
浙公网安备 33010602011771号