关于那个很强的公司的笔试题的 问题
如上,找了半天也没找到原帖,不知道是否被管理员删贴了。那里的很多回帖都很值得学习啊,有一些还没有看懂。所以再拿过来请教
#include <stdio.h>
int main()
{
int a[5]={1,2,3,4,5};
int *ptr2=(int *)((int )a+1);
printf("%x",ptr2);
}
至于为什么出现2000000这个结果,我还是没搞懂。希望那天回帖的大侠们再费费神把原因分析一遍.
我想到了 a是int* 类型的首地址,将它转换成int类型后 加1是在本字节上产生位移对吧?然后再把这个数值转换成为int*传给ptr2,打印时就会打印这个半截的地址数值是吗?
但是还是搞不懂啊?
追踪看到 a的地址为0x0012ff6c,强制转换后(int)a 的值为1245036(10进制),加上1后为1245037.那么打印时怎么就出现2000000(h)了呢?它们不相等啊?