-1


誰かが私に次のようなコードがある出力を説明できますか

#define TOTAL_ELEMENTS (sizeof(array) / sizeof(array[0]))
             int array[] = {23,34,12,17,204,99,16};
             for(d=-1;d <= (TOTAL_ELEMENTS);d++)
             {
              printf("%d\n",array[d+1]);
              }

出力が表示されないのはなぜですか?
しかし、d=1 のように for ループで d の値を変更すると、なぜ出力が表示されるのでしょうか?
マクロ TOTAL_ELEMENT wit d<=4 を削除した場合; 目的の出力が得られるのはなぜですか?

4

3 に答える 3

3

「符号付き型と符号なし型を比較す​​るための変換規則」を理解する必要があります。の例ではfor(d=-1;d <= (TOTAL_ELEMENTS);d++)、ここで d は signed int であり、TOTAL_ELEMENTSunsigned であり、d <= TOTAL_ELEMENTSd を unsigned に変換します。Unsigned -1 は ではない巨大な数である< TOTAL_ELEMENTSため、ループは実行されません。以下に示すように型キャストします。それが動作します。

for(d=-1;d <= (int)(TOTAL_ELEMENTS);d++)
于 2013-05-07T12:39:06.777 に答える