常量指针(Pointer to const)与指针常量(Const pointer)
1. Concepts
很多时候对于这两个概念的困惑来自于中文字面翻译。我们无法通过字面含义直接理解判断该‘常量’修饰指针还是指针指向的内容。只有人为的记忆强化使得自己强制记住常量指针 ---- 内容是常量;指针常量 — 指针是常量。其实英文概念很清晰地表面
- 常量指针是the pointer points to const data,
- 指针常量是the const pointer.
2. Definitions
总的来说,
- 关键字const在星号*左边表示被指的是常量(pointer to const)
- 关键字const在星号*右边表示指针本身是常量 (const pointer)
建议大家直接记住该两点定义与对应的英文说法 — pointer to const, const pointer.
Examples
char greeting[] = "hello";
char *p = greeting; //non-const pointer, non-const data
const char *p = greeting; //non-const pointer, const data
char const *p = greeting; //non-const pointer, const data
char* const p = greeting; //const pointer, non-const data
const char* const p = greeting; //const pointer, const data
Explanation
const关键字修饰作用于其后的定义
const char *p = greeting; //char *p指向的是const data
char const *p = greeting; //p指向的是const data
char const p = greeting; //p指针是const