定義を仮定すると:
int i = 10;
int *p = &i;
*pa がここで有効な左辺値である理由:
*p+=10;
*p が &i に格納されている int の値に評価されるべきではありません。10、したがって「左辺値ではない」エラーを生成しますか?
左辺値は、操作可能なストレージの領域を参照する式です。
*p
は、ストレージの領域を指す表現です。これは、変数のようにストレージの領域を参照しないため、言う10+=10;
こととは異なります。10
非常に簡単に言えば、ポインターはオブジェクトの内容ではなく、オブジェクトを指します (一般的に、非 OOP の意味で)。そうです、逆参照されたポインターは有効な左辺値です。
非常に低レベルの言葉で。ポインターはメモリアドレスに他なりません。参照解除されたポインターは、そのアドレスのメモリです。
の定義と混同していると思いますp
。実際、 はint へのポインタp
型の変数であり、その値は のアドレスに初期化されます。i
それにもかかわらず、*p
有効な左辺値でもあります - ストレージの場所への有効な式です。