No.13732![]() |
優先順位 投稿者---kuma(2004/04/24 19:07:10) |
||
WindowsでC言語の学習をしているのですが、while文について質問させてください。 下記のようなコードなのですが、while文の制御式の(no-- > 0)の部分がわかりません。 参考書には、no > 0を評価してからデクリメントするとありますが、 優先順位が「>」のほうが後置デクリメント演算子のほうが低いので、変数noをデクリメントしてから、no > 0を評価するのかと思ったのですがどうも違うようです。 これはなぜなのでしょうか? //読み込んだ整数の個数だけ*を連続表示 #include <stdio.h> int main(void) { int no; printf("正の整数を入力してください:"); scanf("%d", &no); while(no-- > 0) putchar('*'); putchar('\n'); return (0); } |
No.13734![]() |
Re:優先順位 投稿者---YuO(2004/04/24 19:46:24) |
||
>WindowsでC言語の学習をしているのですが、while文について質問させてください。 >下記のようなコードなのですが、while文の制御式の(no-- > 0)の部分がわかりません。 >参考書には、no > 0を評価してからデクリメントするとありますが、 >優先順位が「>」のほうが後置デクリメント演算子のほうが低いので、変数noをデクリメントしてから、no > 0を評価するのかと思ったのですがどうも違うようです。 >これはなぜなのでしょうか? no--は,最初にnoの値をとりだした後,noを減分し,最後にとりだした値を式no--の値とします。 関数で書くなら,no--は int operator_postfix_decrement (int * num) { int result = *num; *num = *num - 1; return result; }という関数に対して, operator_postfix_decrement(&no)と呼び出したのと同じ効果が得られます。 ちなみに,演算子の優先順序とは演算順序ではありません。 オブジェクトの値は,副作用終了点と呼ばれる地点までに変更されればよいことになっているので, noの値は>演算子の評価より先に変更されることも, no-- > 0の評価が終了してから変更されることもあり得ます。 |
No.13738![]() |
Re:優先順位 投稿者---kuma(2004/04/25 09:05:39) |
||
YuOさんどうもありがとうございます。 >ちなみに,演算子の優先順序とは演算順序ではありません。 >オブジェクトの値は,副作用終了点と呼ばれる地点までに変更されればよいことになっているので そうなのですか。 全然知らなかったのでとても勉強になりました。 |
管理者用メニュー | ツリーに戻る | ホームページ | レンタル掲示板サービス |