は、3行目の評価順序は何ですか? (私はこのPの後に奇妙な何かを指すかもしれないことを知っている - しかし、両方*と++は、同じ優先順位を持っているようだと、私は、正しいメモリのアドレッシングが、評価のために興味がない)(と表現のための*と++)Cでの評価の順序
答えて
いいえ、postfix increment has higher precedence 。
場合によっては、値の評価注(参照解除演算子付き)の後で増分の副作用が発生します。ただし、評価の結果は破棄されます(結果を保存するための努力はしていません)。
がC11
を引用、章§6.5.2.4、(強調鉱山)
:だから、最終的には、結果が同等
p++;
として注意されます接尾辞の結果
あなたはこれが動作するために* Pの周囲かっこを配置する必要があり++
演算子は、オペランドの値です。副作用として、オペランドオブジェクトの の値がインクリメントされます(つまり、適切な型の値1が に追加されます)。加算器演算子と、制約、型、および変換に関する の情報と複合ポインタの説明、および ポインタの操作の影響を参照してください。 結果の値の計算は、オペランドの格納された値を更新する副作用( )の前に順序付けされます。 [...]
したがって、++(より高い優先順位を持つ)を最初に評価する必要があるとしても、* pが評価されるまで延期されますか? – Alex
@Alexはい、「増分」は副作用です。後者の値「++」はオペランド自体の値で、すでに私の答えで強調表示されています。 –
@Alex - 確かに評価の順序と優先順位は本質的に無関係です。 http://stackoverflow.com/a/5475260/129570を参照してください。 –
:
int i = 5; /*line 1*/
int *p = &i; /*line 2*/
(*p)++; /*line 3*/
printf("Hello, World! %d\n", *p);
参照:http://en.cppreference.com/w/c/language/operator_precedence
*何のために*働いていますか?営業担当者は、彼が望んでいたことを特定せず、これらの3つのラインがどのように評価されるかを尋ねただけでした。 – StoryTeller
あなたはそうです。実際には、オペレータはコンパイルして、演算子の優先順位についていくつかのバリエーションを実行し、それらがどのように期待に合っているかを見てください。ああ、まあ、SOはポイントを獲得するのは簡単なゲームじゃない! :-) – EricWerk
*p++
が*(p++)
として扱われるので、後置++
の優先順位は、であり、*
である。
これは本当ですか? –
@SouravGhoshはい – rsp
@SouravGhosh - 意味的には正しい評価です。コンパイラはインクリメントの前にロードを順序付けるでしょうが、標準の '* p ++ 'で定義されているC抽象化は、** rsp **と同様に' *(p ++) 'と意味的に等価です。 – StoryTeller
- 1. Cポインタインクリメントエッジケースと評価順序
- 2. C/C++マクロの評価順序
- 3. Pythonでの評価順序
- 4. C++ 17の式の評価順序とstd :: move
- 5. マクロ評価順序
- 6. C++と関数呼び出しの評価順序
- 7. F#での評価の順序は?
- 8. C++評価の順
- 9. Python dictの__hash__と__eq__評価の順序は何ですか?
- 10. MySQL UNIONでの文評価と変数代入の順序
- 11. 評価順序とdplyr突然変異との矛盾
- 12. 初期化の評価順序
- 13. mathematica:数値積分の評価順序
- 14. 新しい式の評価順序は?
- 15. 折り畳み式の評価順序
- 16. Pythonのグローバルネームスペースと評価順
- 17. 表現の評価
- 18. ポーカーハンド表現と評価
- 19. Mathematica評価の制御と表現
- 20. 代入演算子のC++関数評価順序
- 21. oracleデータベースのupdate-set-clauseでの式の評価順序
- 22. Pythonでのブール式の評価の順序
- 23. 角度2でのディレクティブ評価の順序の制御
- 24. 移動セマンティクス&次のことを考慮すると、引数の評価順序
- 25. C#とC++の評価の順番は?私はC#とC++で次のことを試してみました
- 26. フィルム評価のための正規表現
- 27. &=と| =の定義された評価順序がありますか?
- 28. cataMの評価順
- 29. Scalaの部分関数の場合の評価順序
- 30. パスワード文字列を評価するための正規表現
いいえ、同じ優先順位はありません。 Postfix形式++は、接頭辞形式とは異なり、*よりも優先度が高くなります。 – StoryTeller
'++'がポインタをインクリメントすることを覚えておく簡単な方法は、通常のシングルラインstrcpyの実装に注意することです。 'while(* dst ++ = * srC++);' ++はポインタの代わりに実際の文字をインクリメントする。 – Groo
オペレータの優先順位は[検出可能なもの](http://en.cppreference.com/w/c/language/operator_precedence)です。 –