为什么我的C程序不打印数组值?

bor*_*ree 3 c

可能重复:
一个谜语(在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]);

  return 0;
 }
Run Code Online (Sandbox Code Playgroud)

Meh*_*ari 7

问题是,这TOTAL_ELEMENTS是一个无符号值,并且在你正在尝试这个的实现上,它可能是unsigned long int.比较将尝试将d,, 的整数值提升-1为a unsigned long,这将导致类似0xFFFFFFFFFFFFFFFF并且大于7-2 = 5(结果TOTAL_ELEMENTS-2); 因此,循环条件被评估为false并且从不执​​行正文.如果您明确地抛弃unsigned了比较运算符的右侧,它应该可以正常工作:

for(d=-1;d <= (int)(TOTAL_ELEMENTS-2);d++)
     printf("%d\n",array[d+1]);
Run Code Online (Sandbox Code Playgroud)

(顺便说一句,COUNTOF宏通常定义为:

#define COUNTOF(x) ((sizeof((x))/sizeof(*(x)))
Run Code Online (Sandbox Code Playgroud)

和像是一样使用COUNTOF(array),而不是为每个数组定义一个宏.然而,这不是你看到问题的原因; 你的宏在这里正确使用.这与问题完全正交,它只是一种编码风格的建议.)