ポインターをインクリメントするという観点からこれについて考えてきましたが、一般的には、これら2つの操作/演算子の意味の違いがわかりません。たとえば、私の教授は、int a[10] がある場合、次の要素を指すために a++ を言うことはできないと言いましたが、a+1 が機能することを経験から知っています。その理由を尋ねると、彼は「a++ はアクションで、a+1 は式」のようなことを言いました。彼はそれが「アクション」であるとはどういう意味でしたか? 誰かがこれと 2 つの操作の固有の違いについて詳しく教えてくれたら、とてもありがたいです。ありがとうございました。
6 に答える
x++ および ++x
インクリメント オペレータx++
は変更し、通常は古い のコピーを返しますx
。余談ですが、接頭辞++x
は引き続き変更x
されますが、新しい が返されますx
。
実際x++
には、次のようなものと見なすことができます。
{
int temp = x;
x = x + 1;
return temp;
}
while++x
は次のようになります。
{
x = x + 1;
return x;
}
x + 1
操作は式のx+1
値を返すだけで、変更はしませんx
。そして、それは次のように見ることができます:
{
return (x + 1);
}
x++
変化するという意味での行動ですx
x+1
変わらないx
a++ はアクションである a=a+1 に変換されます (代入演算が含まれているため) a+1 は a+1 を参照する単なる式です (ポインター用語または a の型に応じた数値のいずれかで)
x++
の値を変更する const 式ですx
( だけ増加させます1
)。を参照すると、式はインクリメントされる前x++
の の値を返します。x
式は、インクリメントされた後++x
の値を返します。x
x + 1
ただし、 は の値を表す式ですx + 1
。の値を変更しませんx
。
x++ は x = x + 1 と同等です。実際に x の値を変更しているという点でアクションです。
すべての式は結果を返します (それが でない場合void
)。
x + 1
x + 1 の値を返します。
x++
は x の値を返します。副作用として、x の値は、必ずしもすぐにではなく、ある時点でインクリメントされます。
これは、次のことができることを意味します。
x = x + 1;
しかし、これは違法です:
x = x++;