1.3    「++a」と「a++」の違い


   C言語のプログラムにおいて、インクリメント演算子”++”(1加算するという意味)と、デクリメント演算子”−−”(1減算するという意味)は、比較的よく使われる演算子です。インクリメント演算子とデクリメント演算子は変数の前にも変数の後ろにも付けることができます(それぞれ、前置演算子後置演算子と呼びます。)。aに1を加えるときには「++a」と書くことも、「a++」と書くこともできますが、この2つでは意味が違ってきます。実際に、例を使って比べてみましょう。

(例1)            a=1のとき

         @ b=++a          A b=a++

{@ b=++aのとき}
   この前置演算子のとき、まずaの値が1インクリメントされ、2になります。その後からaの値2がb       に代入されます。よってbの値は2になります。つまり、@の式は、つぎの2つの式を順に行うのと同じことです。
       a=a+1 :
      b=a ;


{A b=a++のとき}
    この後置演算子のとき、まず最初にbにaの値1が代入されます。その後からaが1インクリメントされ2になります。よってbの値は1です。つまり、Aの式は次の2つの式を順に行うのと同じことです。
      b=a ;
      a=a+1 ;

(例2)   int data[3];
           data[0]=0; data[1]=1; data[2]=2;    で a=1のとき

         @data[++a]        Adata[a++]

{@ data[++i] のとき }
     例1のときと同様に、まず先にaがインクリメントされ2になります。その後からaは配列要素として使われるので、data[++a]はdata[2]を指し、値は2となります。つまり、@の式は、つぎの2つの式を順に行うのと同じことです。
     a=a+1 ;
    data[a] ;

{A data[i++] のとき}
     まず先にaが配列要素として使われその後からaがインクリメントされます。よってdata[a++]の値は1となります。つまり、Aの式は次の2つの式を順に行うのと同じことです。
     data[a] ;
    a=a+1 ;

   


「目次へ」