配列を使用してキュー操作を行うCプログラムがあります。そのプログラムでは、配列内の変数をインクリメントします。それがどのように機能するのか理解できません。したがって、これらの操作について説明してください。
array[++i];
array[i++];
これらの操作について説明してください。
array[++i];
-最初にi
をインクリメントし、次にインクリメントされたインデックスの要素を提供します
に相当:
++i; // or i++
array[i];
array[i++];
-最初にi
もインクリメントしますが、後置operator++
は、インクリメント前のi
の値を返します
に相当:
array[i];
++i; // or i++
配列内の変数をインクリメントします。
いいえ、ありません。配列添え字演算子の呼び出し内でi
をインクリメントすると言うことができます。
++i
はi
beforeを評価します。
i++
inrements i
afterそれを評価します。
i=1
の場合、array[++i]
はi=2
を設定してから、array[2]
をフェッチします。
i=1
の場合、array[i++]
はarray[1]
をフェッチし、i=2
を設定します。
後操作と前操作が発生します後または前それらが関与する式は評価です。
私は通常、式でpostおよびpreインクリメント演算子を使用することをお勧めしません。それらはせいぜい混乱につながり、最悪の場合バグにつながる可能性があります。
x = array[++i] + array[i--] ;
がどうあるべきかを考えてください。プログラマー(またはコードを修正しなければならない貧しい悪魔?:-))を混乱させるのがいかに簡単かをご覧ください。
ポストおよびプリインクリメントおよびデクリメント操作も、特にマクロで操作が複数回複製される可能性があるため、マクロで問題を引き起こす可能性があります。
式、IMOでのポストとプリの増分を回避するために、コードがよりシンプルで保守が容易になります。
そうでしょ 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
をインクリメントしてから、その値を返します。
今あなたのコードが何をするかを見つけてみてください;-)
お役に立てれば。
配列[++ i]; -iの値をインクリメントし、インクリメントされた値を配列へのインデックスとして使用します
配列[i ++]; -配列にインデックスを付けてから、iの値をインクリメントします
あなたの質問がキューのコンテキストにあったことは知っていますが、説明のためにスタックを使用します。
配列ベースのスタックを想像してみてください。
T stack[N]; // for some type T
size_t sp = N; // stack pointer
この例では、スタックは「下向き」に成長します。ここで、インデックスN
-1はスタックの一番下で、インデックス0は一番上です。
プッシュ操作は次のようになります。
stack[--sp] = val;
--sp
はsp - 1
と評価され、副作用としてsp
の値が減少するため、上記のステートメントは次のように記述します。
stack[sp - 1] = val;
sp = sp - 1;
割り当てが完了する前にsp
が更新される可能性があることに注意してください。
ポップ操作は次のようになります。
val = stack[sp++];
sp++
はsp
の現在の値を評価し、副作用としてsp
の値をインクリメントするため、次のように記述します。
val = stack[sp];
sp = sp + 1;
上記と同じ注意が必要です。