令人困惑的指针声明

时间:2013-05-29 19:07:11

标签: c++ pointers

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

const char * const * const * cp;

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

4 个答案:

答案 0 :(得分:7)

这是

的宣言
  • 指针
  • 到const指针
  • 到const指针
  • const char

因此,您可以更改cp,但不得更改任何

*cp
**cp
***cp

答案 1 :(得分:4)

我们可以从cdecl看到,cppointerconst pointerconst pointerconst char

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

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

此外,标准(第8节)说:

  

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

答案 2 :(得分:1)

来自cdecl.org

  

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

的const指针

答案 3 :(得分:1)

这与char * * * cp相同,除了所有指针都是const,除了一个。由于char *** cp是一个指向指针的指针,你的例子是相同的,但它是指向const指针的const指针的指针