您的位置:首页 > 其它

关于强制转化后的风险

2015-09-19 16:48 260 查看
char i = 3;

char *q = &i;

long *p = (long *)(&i);

q的值为0x0013ff63;

q的内容为3;

p的值为0x0013ff63;

p的内容为-858993661;

都是i的地址为什么结果不一样?虽然q和p都为指针,但是q为char类型,而p为long类型,强制转换时,地址被强行扩大,而这些扩展的地址里内容未知,从而为不确定的值。

char i = 3;

char *q = &i;

long p = (*(long *)(&i));

此时可以看到p的值为-858993661

而我们把i定位为int类型时:

int i = 3;

long p = (*(long *)(&i));

此时可以看到p的值为3,这是因为在win32环境下,long和int占的位数一样,都是4个字节,32位,从而强制转化时,地址不需扩展。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: