p
は整数ポインターであり、整数であると仮定しますi
。
*p++
に対応する整数値を与えるp
.
i++
1ずつインクリメントされた整数値を与える
動作により、上記の両方が整数を生成するため、 同じエラーが報告されるべきでは++*p++
ありませんか? ++i++
しかし、 コンパイラ エラーが発生++*p++
しているのになぜ機能するの でしょうか。++i++
int main()
{
int a[10] = {0};
int *p = (int*)&a;
int i = 0;
// printf("%d", ++i++); -- FAILS error: lvalue required as increment operand
printf("%d\n", ++*p++ ); // Prints 1
return 0;
}
編集
++i++ は次のように分解されます。
i++
++(result)
これはまさに私が混乱している場所です: +*p++ を次のように分解できるのと同じ方法で
*p++
++(result).
*p++ は、ポインターではなく、値 (右辺値) を返します。では、なぜ違いがあるのでしょうか?