web-dev-qa-db-ja.com

配列内のインクリメント演算子

配列を使用してキュー操作を行うCプログラムがあります。そのプログラムでは、配列内の変数をインクリメントします。それがどのように機能するのか理解できません。したがって、これらの操作について説明してください。

array[++i];
array[i++];
8

これらの操作について説明してください。

  1. array[++i];-最初にiをインクリメントし、次にインクリメントされたインデックスの要素を提供します

    に相当:

    ++i; // or i++
    array[i];
    
  2. array[i++];-最初にiもインクリメントしますが、後置operator++は、インクリメント前のiの値を返します

    に相当:

    array[i];
    ++i; // or i++
    

配列内の変数をインクリメントします。

いいえ、ありません。配列添え字演算子の呼び出し内でiをインクリメントすると言うことができます。

11
LogicStuff

++iibeforeを評価します。

i++ inrements iafterそれを評価します。

i=1の場合、array[++i]i=2を設定してから、array[2]をフェッチします。

i=1の場合、array[i++]array[1]をフェッチし、i=2を設定します。

後操作と前操作が発生しますまたはそれらが関与する式は評価です。

私は通常、式でpostおよびpreインクリメント演算子を使用することをお勧めしません。それらはせいぜい混乱につながり、最悪の場合バグにつながる可能性があります。

x = array[++i] + array[i--] ;がどうあるべきかを考えてください。プログラマー(またはコードを修正しなければならない貧しい悪魔?:-))を混乱させるのがいかに簡単かをご覧ください。

ポストおよびプリインクリメントおよびデクリメント操作も、特にマクロで操作が複数回複製される可能性があるため、マクロで問題を引き起こす可能性があります。

式、IMOでのポストとプリの増分を回避するために、コードがよりシンプルで保守が容易になります。

3
StephenG

そうでしょ i++および++iインクリメントiを1でインクリメントします。また、この命令はiを返すため、コード内のiの値が必要な場所にこれを配置できます。

2つの違いは、i++はポストインクリメントであり、++iは事前インクリメントです。これは何を意味するのでしょうか?

さて、iが6であるとしましょう。

array[i++]
array[i]

あなたは実際にやっているでしょう:

array[6]
array[7]

ポストインクリメントを使用するため、最初に戻り値を返し、次にiをインクリメントします。

もしあなたがそうするなら:

array[++i]
array[i]

基本的に次のことを行います。

array[7]
array[7]

事前インクリメントを使用するため、最初にiをインクリメントしてから、その値を返します。

今あなたのコードが何をするかを見つけてみてください;-)

お役に立てれば。

3
regapictures

配列[++ i]; -iの値をインクリメントし、インクリメントされた値を配列へのインデックスとして使用します

配列[i ++]; -配列にインデックスを付けてから、iの値をインクリメントします

1
jeremy

あなたの質問がキューのコンテキストにあったことは知っていますが、説明のためにスタックを使用します。

配列ベースのスタックを想像してみてください。

T stack[N];     // for some type T
size_t sp = N;  // stack pointer

この例では、スタックは「下向き」に成長します。ここで、インデックスN-1はスタックの一番下で、インデックス0は一番上です。

プッシュ操作は次のようになります。

stack[--sp] = val;

--spsp - 1と評価され、副作用としてspの値が減少するため、上記のステートメントは次のように記述します。

stack[sp - 1] = val;
sp = sp - 1;

割り当てが完了する前にspが更新される可能性があることに注意してください。

ポップ操作は次のようになります。

val = stack[sp++];

sp++spの現在の値を評価し、副作用としてspの値をインクリメントするため、次のように記述します。

val = stack[sp];
sp = sp + 1;

上記と同じ注意が必要です。

0
John Bode