0

次の C プログラムの期待される出力は、配列内の要素を出力することです。しかし、実際に実行すると、そうはなりません。

  #include<stdio.h>

  #define TOTAL_ELEMENTS (sizeof(array) / sizeof(array[0]))
  int array[] = {23,34,12,17,204,99,16};

  int main()
  {
      int d;

      for(d=-1;d <= (TOTAL_ELEMENTS-2);d++)
          printf("%d\n",array[d+1]);//printing the array

      return 0;
  }//looks simple but no result

何がうまくいかないのですか?出力が得られないのはなぜですか?

4

1 に答える 1

10

比較では

d <= (TOTAL_ELEMENTS-2)

TOTAL_ELEMENTSは型を持っているsize_tのでd、unsigned に変換されます。たとえば、sizeof(size_t)==4これはテストを行います

0xffffffff < 5

これは失敗し、ループが終了します。

ループカウンターを -1 から開始したい場合

d <= (int)(TOTAL_ELEMENTS-2)

うまくいくだろう

于 2013-08-20T06:53:11.217 に答える