1. prinf 関数のパラメーターにはポインター式が含まれていますが、それらはどのような順序で計算されますか? コード操作の結果は明らかに左から右ではありません。
リーリー给我你的怀抱2017-06-27 09:20:57
1 つのステートメント内で変数を複数回変更することは未定義の動作であり、異なるプラットフォームでは異なる結果が生じる可能性があります。この質問は意味がありません。
学习ing2017-06-27 09:20:57
printf{"%d",++i}
は2つの操作を意味します
最初に i=i+1 を実行し、次に i を出力します
そして i++ は
を意味します最初に出力し、次に i=i+1 を実行します
某草草2017-06-27 09:20:57
関数パラメータの演算順序は、関数の内部ロジックとはほとんど関係がありません。スタックにプッシュする前 (関数が実行される前) に計算される必要があります。特定のシーケンスを知りたい場合は、アセンブリコードを参照してください (具体的な意味は明日更新されます、申し訳ありません) ++p
,函数结束后,再计算p++
リーリー
結果に表示される 2 と 3 はまだ説明できます。
4 非常に不思議なことですが、しぶしぶ説明すると、*(++p)++
の外側の ++
も p< を意味します。 /code> 動作します
しかし、p++
の形式の演算子はステートメントの終了後にインクリメントされる必要があるため、この説明は明らかに間違っています。 *(++p)++
括号外面的++
也对p
起作用了,
但是形如p++
运算符,应该在语句结束后才自增的,所以这样解释明显不对。
我在Cygwin + gcc (GCC) 5.4.0
Cygwin + gcc (GCC) 5.4.0
環境です。 実行結果は次のとおりです。 使用されている環境は次のとおりです。
ringa_lee2017-06-27 09:20:57
関数パラメータがスタックにプッシュされる順序は確実です参数的求值顺序是未指定
的,
编译器只保证在printf
调用之前,所有参数的值是已知的
这方面的资料可以搜索序列点(Sequence Point)