![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
No.3ベストアンサー
- 回答日時:
#1です。
演算子の動作について少し補足しておきます。
C言語の演算子の動作は「評価」と「実行」の2種類があります。
ここで「評価」という言葉がC言語では使われますが、どういう意味かというと簡単に言えばある値に置き換わると考えてください。
そして「実行」というのはある動作、たとえば変数に値が代入されるなどを言います。
たとえば「=」演算子の場合には
実行:左辺の変数に右辺の値を代入する。
評価:代入された値に評価される(置き換わる)
となります。
つまり
A=1
という式があった場合にAという変数に1が代入され(実行)、「A=1」自体は1に評価される(置き換わる)ということになります。
C言語では
A=B=1
という式が書けるのはご存知だと思いますが、これも演算子の「評価」と「実行」で考えると動作が明確にわかります。
「=」演算子は結合規則が右から左(結合規則は同じ式に同じ演算子があった場合にどちらから値を評価するかの基準です)なのでまず、「B=1」という式が評価されます。すなわち上の式は意味的には
(A=(B=1))
となり
(A=(B=1)) → (A=(1)) <---- 「B=1」が評価され1となった
という形になります
また当然、「実行」の動作としてBには1が代入されます。
そして次に(A=(1))が評価され最終的にはうえの式の評価値は
((1))
となります。
そして左の演算子の実行動作としてAにも1が代入されます。
後置++演算子の「評価」と「実行」は
実行:変数をインクリメント
評価:変数の元の値
なので
A=B++ (Bに1が入っているとすると)
(A=(B++)) → (A=(1))
と評価され、Bの実行動作としてBがインクリメントされます。(結果Bは2になる)
そして(A=(1))が評価され
結果的に
Aには1がBには2が代入されることになります。
懇切丁寧なご教授ありがとうございました。結合規則、式の評価、
実行、特に今まで a=b=1 など漠然と取り扱っていただけに大変勉強
になりました。実はポインタのポインタとか、強制的な(テクニック
上の?)キャストとかを学ぶ上でこの演算子をはっきりとマスター
しておかなければと思っていたところです。今回お教え頂きました
ことはこれからの学習にすごく役立ちそうで感謝しています。
ご親切なご教授本当にありがとうございました。
No.2
- 回答日時:
既に回答が出ていますが、質問者さんは実行の優先順位のことを考えておられると思います。
実行の優先順位と式の評価の優先順位を分けて考えると、
後置演算子を優先度高く評価する必要がある事が分ると思います。
実行の優先順位と式の評価の優先順位は分けて考える必要があ
るということですね。
*po++について少し考えてみました。もし++が*よりも後順位だ
ったとすると++は(*po)と結合する以外になく、それではポインタ
をインクリメントしてそこにある内容を参照したい場合に困った
ことになる、そのような解釈でよろしいのでしょうか?
どうぞよろしくお願い申し上げます。
No.1
- 回答日時:
簡単に言えば、++演算子を先に評価しないと不自然になるからでしょう。
たとえば++演算子が一番低いと以下の式
A = B++;
は(A=B)++ という意味になってしまい、AにBを代入して、その結果をインクリメントするという意味(厳密に言えば定数をインクリメントすることになるのでエラーですが)になってしまい、Bがインクリメントされません。
++演算子のプライオリティが高いので上の式は
A = (B++) <--- 意味的にです。
となり、B++はBの元の値に評価され、その後でBがインクリメントされるため望んだ結果となります。
分かりやすいご教示ありがとうございます。
++は'B'と結びついているのであって(A=B)と結びついているので
はない、これは演算の順序とは別、ということですね。式の評価
といいますのはそういう意味だったのですか。良く分かりました。
どうもありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excel 複数列のある文字を優先して1列に表示したいです 2 2022/12/03 12:07
- その他(悩み相談・人生相談) 僕は中二です 将来のことについて質問です 先ず、僕の通っている学校は、県全体で見たときに中の下くらい 4 2022/08/09 14:12
- その他(学校・勉強) 中学受験レベルの社会の問題についての質問です。 新潟、千葉、鹿児島のうち乳牛の飼育数の多い県を答える 1 2022/10/22 01:30
- その他(恋愛相談) 恋人の優先順位 2 2023/06/27 20:01
- その他(悩み相談・人生相談) 僕の家族は、父、母、長男、姉、次男、僕の6人家族です 僕の家族はいつからか、家族内で優先順位が出来ま 3 2022/06/12 04:14
- 世界情勢 ここ最近、日本は国際的地位の後退がありますが、バブル期に比べると低下したものの、G7にも入っています 8 2022/08/13 19:18
- いじめ・人間関係 友人関係の温度差について。 自分の気持ちがよくわかっておらず、回答を頂きたいです。 私は夏休み、A, 1 2023/06/20 00:11
- 世界情勢 防衛費の増額は必要ですか? また、分配優先順位は? 19 2022/12/28 11:13
- 仕事術・業務効率化 作業をする時に、作業順や優先順位をちゃんと付けれるようになりたいです。 自分は作業したりする時、頭の 3 2023/07/11 03:15
- その他(暮らし・生活・行事) 家族と友人と恋人 優先順位は? 2 2022/07/20 17:53
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
jsp~jspにhiddenを使って変数...
-
エラーの意味は? Lvalue req...
-
VBAでダブルコーテーション入り...
-
[VBS]変数を定数に変換する方法...
-
テキストボックスの値を変数に...
-
プログラミングで変数と関数の...
-
C言語 アロー演算子について質...
-
EXCEL/VBA 変数の値をクリップ...
-
i++と++i ってどう違うのですか?
-
processing エラーで、 "cannot...
-
【VBA】複合代入演算子
-
数値計算??
-
Serialize(CArchive& ar)にて
-
C言語 exitの使い方
-
ファイルの特定行を取り出したい.
-
VB6で配列を文字列に変換する方...
-
vbsでテキストファイル内の文字...
-
数字の位ごとの値を表示するプ...
-
エクセルへのデータの貼付時に...
-
Excel-vba 文字列と変数を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エラーの意味は? Lvalue req...
-
VBAでダブルコーテーション入り...
-
だれがとけるの?
-
jsp~jspにhiddenを使って変数...
-
テキストボックスの値を変数に...
-
EXCEL/VBA 変数の値をクリップ...
-
[VBS]変数を定数に変換する方法...
-
processing エラーで、 "cannot...
-
Variant型で宣言してるのにEmpt...
-
整数xxxが大き過ぎますというエ...
-
プログラミングで変数と関数の...
-
C言語 アロー演算子について質...
-
C言語 列挙型(enum型)変数について
-
i++と++i ってどう違うのですか?
-
切り上げ
-
VB6.0での条件文にある#の意味
-
インクリメント演算子の前置(+...
-
親ウィンドウの情報をインライ...
-
C言語 exitで終了した関数の戻...
-
Serialize(CArchive& ar)にて
おすすめ情報