2012-10-23 103 views
1

我正在閱讀一些代碼,並遇到這件事。我現在沒有整個環境保存這一行。奇怪的運算符與指針

cout<<(*--*++ptr+1)<< endl; 

編譯沒有問題,當它在我們的輸入值..

其聲明是這樣工作的。

char ***ptr ; 

這個操作符是什麼,它是否包含在標準中?

+0

答案就夠了。這些類型的技巧是可以的,我想,但應該在評論之前說明操作意圖以及可能的簡要解釋。 – speakingcode

+0

這是真實的生產代碼嗎? –

+0

-1不是真實代碼 –

回答

7

它不是一個操作符,它是幾個一元運算符的組合。它被解析如下:

*(--(*(++ptr))) + 1 

所以,ptr1先增加,然後解除引用,則該值被降低,並且再次取消引用。

+1

圓括號使*更容易理解。 * [提示,如果您正在編寫類似於此的代碼] * –

+0

那麼它等於* ptr + 1? – Ralph

+0

@Ralph不,你不會像你遞增一樣在'*'s的同一層遞減。 –