日期:2024年2月26日标签:C/C++

常量指针 or 指针常量 #

C++ 书籍的翻译中有两个特别混淆的概念:常量指针和指针常量。乍一看这两个意思十分相近,通过中文翻译很难看出这两者之间的区别。它们的英文翻译如下:

  • 常量指针:pointer to const object,即指针指向的对象是常量。
  • 指针常量:const pointer to object,指针本身是常量。

这也是为什么新手学习 C++ 十分困难的一个原因,所以这里建议大家学习 C++ 时,尽量阅读英文书籍。即使大名鼎鼎的 《C++ primer》 也没有将这两个概念翻译好。

关于指针和常量的组合写法有很多种,下面列举出 6 种:

  • const int p
  • const int* p
  • int const* p
  • int * const p
  • const int * const p
  • int const * const p

你能说出它们表达的意思吗?

如果你是新手,准确快速说出它们的意思,这应该是一个比较难的任务。

简单记法 #

有一种简单的记法:从右往左读,遇到 p 就替换成 “p is a ”,遇到 * 就替换成 “pointer to”。

const int p 就是常量整数。我们对后面 5 种写法,套用上面的简单记法:

  • const int* p: p is a pointer to int const
  • int const* p: p is a pointer to const int
  • int * const p: p is a const pointer to int
  • const int * const p: p is a const pointer to int const
  • int const * const p: p is a const pointer to const int

总结:* 前面的是被指向对象的修饰,* 后面的是对指针本身的修饰。

(完)

目录