Thinkers'Studio
JavaとC言語の自習ツール
演算子の前置と後置( ++, -- )(C言語版)

++ (インクリメント演算子)、-- (デクリメント演算子)

 値を 1 だけ増やす ++、1 減らす -- は項をひとつ取る単項演算子で、前置と後置の使い方があります。
 処理を 1文で書く次のような場合は、それぞれ同じ結果となります。
  ++n; (前置) と n++; (後置)    文実行後のnは同じ
  --n; (前置) と n--; (後置)    文実行後のnは同じ
 しかし、前置と後置には違いがあります。
 「前置」は先に 1 増(減)してからその変数を使い、「後置」は使ったあとに 1 増(減)します。
 たとえば、結果を変数に代入する場合は結果が変わります。
  x = ++n; (前置) と x = n++; (後置)   xは後置より前置の結果が1大きい
  x = --n; (前置) と x = n--; (後置)   xは後置より前置の結果が1小さい

 「n を増減した値を代入する」のと、「先に x に代入してから n を増減する」のでは、処理が異なります。
 この違いを理解して、++ (インクリメント演算子)、-- (デクリメント演算子)を正しく使いこなしましょう。

(今回のクイズです)
 次のプログラムでは、3種類の処理をそれぞれ前置、後置の両方で書いています。
 実行したとき、printf文 の %d で表示される値が異なるのは (1)〜(3) のうち何番でしょう? 答えはひとつとは限りません。
#include <stdio.h>
main()
{
    int n;
    
    for( n = 0; n < 5; ++n ) printf( "Hello!\n" );
    printf( "(1)前置 %d\n", n );

    for( n = 0; n < 5; n++ ) printf( "Hello!\n" );
    printf( "(1)後置 %d\n", n );

    n = 5;
    printf( "(2)前置 %d\n", 60/++n );
    n = 5;
    printf( "(2)後置 %d\n", 60/n++ );

    n = 5;
    printf( "(3)前置 %d\n", 3*(++n) );
    n = 5;
    printf( "(3)後置 %d\n", 3*(n++) );
}
   (答えは、次回のC言語の Tips で ・・・)
前回のクイズの答え:  何も表示されません。  (前回の問題を見る
指定されたスクリーン番号は1〜4の範囲にありませんが、間違っていることも告げずに、シカトするプログラムになっています。 どの case にも対応しないときに実行される default が見つからないので、そのまま switch を抜けて処理が終わります。 defualt の後ろにある printf文はけっして実行されません。