3

我正在阅读 Accelerated C++ 的附录 A。在那里,作者展示了一个声明示例,如下所示:

const char * const * const * cp;

他们说 const char 是说明符, * const * const * cp 是声明符。我对额外的 const 和 *s 的目的感到困惑。这是一个指向 const char 的 const 指针的声明吗?

4

4 回答 4

7

这是声明

  • 一个指针
  • 到一个常量指针
  • 到一个常量指针
  • const char

因此你可以改变cp,但你不能改变任何一个

*cp
**cp
***cp
于 2013-05-29T19:10:01.200 回答
4

cdecl可以看出,cp是一个pointerto const pointerto const pointerto const char

你可以通过从右到左分解来看到这一点:

const char * const * const * cp;
                             cp is
                           a pointer
                   to const pointer
           to const pointer
to const char

此外,标准(§ 8)说:

说明符指示被声明实体的类型、存储类或其他属性。声明符指定这些实体的名称,并(可选地)使用 *(指向)和 ()(函数返回)等运算符修改说明符的类型。

于 2013-05-29T19:09:19.537 回答
1

来自cdecl.org

将 cp 声明为指向 const 的指针 指向 const 的指针 指向 const char

于 2013-05-29T19:09:49.197 回答
1

这与 char * * * cp 相同,只是所有的指针都是 const,除了一个。由于 char***cp 是指向指针的指针,因此您的示例是相同的,但它是指向 const 指针的指针,指向 const 指针

于 2013-05-29T19:10:18.733 回答