ISO C99標準からの引用:
6.5.2.4 Postfix increment and decrement operators
Constraints
1
The operand of the postfix increment or decrement operator shall have qualified or
unqualified real or pointer type and shall be a modifiable lvalue.
この場合:
++*p++; //Statement 2
postfix++
は優先順位と接頭辞が高く、優先順位++
と結合性*
は同じです。right to left
これは、最初のステップで、値ではなくポインターをインクリメントしていることを意味します。そのため、その次のアドレスが表示されtype
ます。そして、value (which is actually *p)
インクリメントされます。だから、この場合いいえ constraint violation
。と同じ++(*(p++))
です。
以下の他の場合:
int x=10;
++x++; //Statement 1
上記の変数(ポインターではない)の場合++
(接尾辞または接頭辞のインクリメントまたはデクリメントのいずれか)はrvalue
、適用++
または--
オンrvalue
ですconstraint violation
。++
または--
オペランドは である必要がありlvalue
ます。上記の標準的な見積もりを参照してください。したがって、エラーが発生します。