我正在阅读 Accelerated C++ 的附录 A。在那里,作者展示了一个声明示例,如下所示:
const char * const * const * cp;
他们说 const char 是说明符, * const * const * cp 是声明符。我对额外的 const 和 *s 的目的感到困惑。这是一个指向 const char 的 const 指针的声明吗?
这是声明
const char
因此你可以改变cp
,但你不能改变任何一个
*cp
**cp
***cp
从cdecl可以看出,cp
是一个pointer
to const pointer
to const pointer
to const char
。
你可以通过从右到左分解来看到这一点:
const char * const * const * cp;
cp is
a pointer
to const pointer
to const pointer
to const char
此外,标准(§ 8)说:
说明符指示被声明实体的类型、存储类或其他属性。声明符指定这些实体的名称,并(可选地)使用 *(指向)和 ()(函数返回)等运算符修改说明符的类型。
来自cdecl.org:
将 cp 声明为指向 const 的指针 指向 const 的指针 指向 const char
这与 char * * * cp 相同,只是所有的指针都是 const,除了一个。由于 char***cp 是指向指针的指针,因此您的示例是相同的,但它是指向 const 指针的指针,指向 const 指针