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位,从而强制转化时,地址不需扩展。