以下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
出了什么问题?为什么我没有得到任何输出?
答案 0 :(得分:10)
在比较中
d <= (TOTAL_ELEMENTS-2)
TOTAL_ELEMENTS
的类型为size_t
,因此d
会转换为无符号。比方说,sizeof(size_t)==4
,这就是测试
0xffffffff < 5
失败,导致循环退出。
如果你真的想从-1开始你的循环计数器
d <= (int)(TOTAL_ELEMENTS-2)
会起作用