0

セミコロンの前にシーケンスポイントがないことは理解していますが、式で古い値2を使用するための逆参照ポインターのもっともらしい説明はありますか?

それとも、それを未定義の振る舞いとして単純に置くことができますか?

int i=2;
int *x=&i;
*x+=*x+=i+=7;

結果:

i= 13
4

2 に答える 2

7

これは「単に」未定義の動作です。

とは言うものの、コンパイラはおそらく、の値をi1回読み取り、すべての演算を実行してから、の新しい値を格納するコードを出力しますi

実際の説明を見つけるための明白な方法は、コンパイラーによって生成されたアセンブリーを調べることです。

于 2011-01-24T16:33:06.313 に答える
-3

動作は未定義ではありません。コンパイラが式を分解し、中間結果をスタックにプッシュする方法に依存します。2つ*xのsが最初に計算され(両方とも2に等しい)、スタックにプッシュされます。次にi、7が追加されて9になります。次に、2*xに等しい2番目のがスタックから引き出されて追加されて11になります。次に、最初*xのがスタックから引き出されて11に追加されて13になります。

ここで何が起こっているかについてのヒントについては、逆ポーランド記法を調べてください。

于 2011-01-24T16:40:30.150 に答える