危险数据转换

 

#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语句在signedunsigned int 之间测试相等性,d被升级为unsigned int类型,-1转化为unsigned int 类型是一个巨大的正整数,致使表达式的值为假,所以输出了一个随机值。所以要对Count进行强制转化(int

所以尽量不要用无符号类型,不要仅仅因为年龄和国债不可能是负数,而用他表示数量。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值