3
for (; cnt--; dp += sz)
{
        pair_sanitize_struct(rec_id, ctx->api_mode, dp, FALSE);
}

この for ループがどのように機能するかを誰かが説明できますか? cpp ファイルに属します。for ループの条件とそのチェック方法がわかりません。(関数呼び出し中)

4

7 に答える 7

2

ステートメントの一般的な形式はfor次のようになります。

for (init-statement; condition; expression)
    statement

init-statementループの過程で変更される開始値を初期化または割り当てるために使用されます。conditionループコントロールとして機能します。conditiontrue と評価される限り、statement実行されます。がtrue のexpression場合にのみ、反復ごとに評価されますcondition

コードに戻ります。

for (; cnt--; dp += sz)

init-statementこれは、何もしない null ステートメントです。conditioncnt--、その値をcntデクリメントとして評価します1cntがゼロでない場合conditionは真、cntゼロの場合conditionは偽です。

于 2013-09-25T06:11:45.180 に答える
1

条件は、真または偽のシナリオとして解釈されています。

0 の場合は false、それ以外の場合は true になります。

于 2013-09-25T06:07:37.633 に答える
1

これは次のコードと同等です -

for(; cnt-->0; dp += sz);

値が 0 に等しくない限り、真と見なされるためです。

于 2013-09-25T06:12:42.843 に答える
0

c++ では、真または偽である条件の値は、非 0 (真) または 0 (偽) によって決定されます。

上記のループは、cnt が 0 でない限り反復し続けます。cnt が 0 になると終了します。

アップデート:

ここで重要な点を明確にするために、ループを終了するのは値 0 です。何らかの理由でcnt がすでに負の値で始まっている場合、ループは終了しません。

于 2013-09-25T06:06:40.223 に答える
0

So syntax for for loop is

 for (<initialization(optional)>; <condition(Optional)>; <increment(Optional)>)
 {
    ...
 }

Say for cnt is 2 your loop works as follows,

  for(; cnt--; dp+=size)
  {
      ...
  }

Execution flow is,

 1. initialization statement will be executed once. Since you dont have one nothing will be executed

 2. Next condition statement will be executed. In your case cnt-- which result in cnt value is considered as condition result. So, if cnt is 2 then value 2 is considered as condition result. Hence all non-zero are considered as TRUE and zero is considered as FALSE. After evaluating to TRUE it decrements cnt by 1

 3. Once the condition results in TRUE then it executes the statement part say,  pair_sanitize_struct(rec_id, ctx->api_mode, dp, FALSE);

 4. At the last it executes the increment statement of for loop,in you case it is dp-=size;

 5. It executes from 2 till condition evaluated to ZERO ie FALSE it comes out of loop.
于 2013-09-25T06:31:19.700 に答える
0

通常の整数はブール値としても使用できることに注意してください。ゼロは false で、ゼロ以外はすべて true です。

これは、cntがゼロになるまでループが続き、その後ループが終了することを意味します。ただし、ポストデクリメント演算子が使用されるためcnt、ループが終了した後の値は になります-1

于 2013-09-25T06:11:16.917 に答える
0

に似ています

while(cnt--)
{
        pair_sanitize_struct(rec_id, ctx->api_mode, dp, FALSE);
        dp += sz;
}

これが役に立てば幸いです。

于 2013-09-25T06:16:18.360 に答える