2013-05-29 196 views
3

我在閱讀Accelerated C++的附錄A.有作者顯示的聲明看起來像這樣的例子:混淆指針聲明

const char * const * const * cp; 

他們說,爲const char是符和* const的* const的* cp是說明符。我對額外的const和* s的目的感到困惑。這是一個const char指針的const聲明的聲明嗎?

+2

這是一個「const指針指向const指針的指針」 const char「,我相信。這就是C++的原因。 – aardvarkk

回答

7

它的

  • 指針聲明
  • 到一個常量指針
  • 一個const指針
  • const char

因此你可能會改變cp,但你可能不更改任何

*cp 
**cp 
***cp 
+0

爲什麼有人想要這樣做? – crush

+1

@crush虐待?我從來沒有用過三分球,我不知道你什麼時候需要他們。 –

+0

我發現一個雙指針有用的實例是非常罕見的。 – crush

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)說:

的SPECI網絡ERS註明型號,存儲類

您可以通過它分解從右到左看看這個或正在申報實體的其他財產 。聲明者指定這些實體的名稱 ,並(可選)使用諸如*(指向)和()(函數返回)等運算符修改指定者 的類型。

+0

這非常有幫助,謝謝。 – user2433857

1

cdecl.org

聲明CP作爲指針指向const指針常量指針爲const char

1

這是相同的字符* * * CP除了所有指針是const,除了一個。由於char *** cp是一個指向指針的指針,所以你的例子是相同的,但是它是一個指向const指針的指針的指針

+0

格式化 - 貓得到了你的舌頭? ;) –

+0

不再,星星使一些文字粗體 – aaronman

+0

「所有的指針都是const」 - 不,兩個指針是const,一個指針是非const – kotlomoy