次の例を検討してください。
struct {
int num;
} s, *ps;
s.num = 0;
ps = &s;
++ps->num;
printf("%d", s.num); /* Prints 1 */
印刷し1ます。
したがって、演算子の優先順位によると、->が よりも高い++ため、最初に値ps->num(0) がフェッチされ、次に++演算子がそれを操作するため、1 にインクリメントされるためだと理解しています。
struct {
int num;
} s, *ps;
s.num = 0;
ps = &s;
ps++->num;
printf("%d", s.num); /* Prints 0 */
この例では0、理由がわかりません。最初の例の説明は、この例でも同じです。しかし、この式は次のように評価されるようです:最初
に、演算子++が動作し、 に動作するpsため、次の にインクリメントしますstruct。それからのみ動作し、次のフィールドを->フェッチするだけで何もしないため、何もしません。
しかし、これは演算子の優先順位と矛盾しています。numstruct->++
誰かがこの動作を説明できますか?
編集:プレフィックス/演算子の優先順位が よりも低い
ことを示す C++ 優先順位テーブルを参照する 2 つの回答を読んだ後、グーグル検索を行い、このルールが C 自体にも適用されることを示すこのリンクを思いつきました。それは正確に適合し、この動作を完全に説明していますが、このリンクの表は、K&R ANSI C の私自身のコピーの表と矛盾していることを付け加えなければなりません。++--->
ありがとう。