-1

質問1

int x;
if (x++)
  {
    printf ("\nASCII value of X is smaller than that of x");
  }

xここにガベージ値が割り当てられていますか?

質問2:

main ()
{
  int i;
  for (i = 0; i++ < 10;)
    {
      printf ("%d\n", i);
    }
}

誰かがどのように機能するか説明できますi++ < 10か?つまり、9で終わる必要がありますなぜ10

4

3 に答える 3

2
  1. の値x不確定であり、トラップ表現である可能性があります。この場合、の動作x++は未定義です。

  2. 式は、 ;の現在の値にi++ 評価されます。副作用iとして、の値が増加します。したがって、== 1の場合、式は1と評価され、副作用として2に設定されます。 iii++i

章と詩

6.5.2.4接尾辞のインクリメントおよびデクリメント演算子

...
2接尾辞++演算子の結果は、オペランドの値です。結果が得られた後、オペランドの値がインクリメントされます。(つまり、適切な型の値1が追加されます。)制約、型、変換、およびポインターに対する操作の影響については、加法演算子と複合代入の説明を参照してください。オペランドの格納値を更新する副作用は、前のシーケンスポイントと次のシーケンスポイントの間で発生します。

強調鉱山。

于 2012-06-07T21:58:33.007 に答える
1

質問1:はい

質問2:はい。iは1ずつインクリメントされ、10未満の場合は比較されます。

于 2012-06-07T21:21:03.847 に答える
1

最初の質問では、xを宣言します

int x;

ただし、割り当てないでください。これにより、xの値を保持するためのメモリが予約されますが、既知の値に初期化されません。それは本当に悪いことです。それからあなたはそれを読み、それを増やし、そしておそらく何かをします。

if ( x++ ) {
  printf ( "\nascii value of X is smaller than that of x" ) ;
}

読む前にその値が何であったかわからないので、ifステートメントが何かを出力するかどうかについて知識に基づいた推測をすることは不可能です。

2番目の質問(質問ごとに1つの質問をお願いします)では、iの値を読み取り、それをインクリメントしてから、読み取った値を比較します。ポストインクリメントとは、基本的に「読み取ったに値をインクリメントする」ことを意味するため、新しい値が保存され、古い値と比較され、以下のprintfステートメントは「現在の新しい」値を出力します。

于 2012-06-07T21:24:00.150 に答える