#include <stdio.h>
int array[]={12,13,14,15,16};
#define Count (sizeof(array)/sizeof(array[0]))
void main( )
{int d=-1,x,i,j;
for(i=0,j=1;i<=Count-1;i++,j++){
if(d<=(int)Count-2)
x=array[d+j];
printf("%d ",x);
}
}输出:12 13 14 15 16
与
#include <stdio.h>
int array[]={12,13,14,15,16};
#define Count (sizeof(array)/sizeof(array[0]))
void main( )
{int d=-1,x,i,j;
for(i=0,j=1;i<=Count-1;i++,j++){
if(d<=Count-2)
x=array[d+j];
printf("%d",x);
}
}输出:5个-858993460
的区别
数据间的转化,因为sizeof的返回值是一个无符号的数,if语句在signed与unsigned int 之间测试相等性,d被升级为unsigned int类型,-1转化为unsigned int 类型是一个巨大的正整数,致使表达式的值为假,所以输出了一个随机值。所以要对Count进行强制转化(int)
所以尽量不要用无符号类型,不要仅仅因为年龄和国债不可能是负数,而用他表示数量。

441

被折叠的 条评论
为什么被折叠?



