↑上面答案改一下,在64位下运行,所以结构体大小是32
初始值一样,都是p=0x10000000
*******在这里,指针后面跟+号,代表偏移,不代表值相加。********
*******在这种运算里面,指针的数据类型是几,就代表偏移多少单位(字节);+号后的0x200,代表偏移多少次*********
(这里反过来记也可以,结果一样,但是意义不准确)
所以一开始的时候,结构体大小是32,所以偏移32个单位,因为结构体也和int ,short等一样,是一种数据类型,即char的时候偏移1个字节,int的时候偏移4个,short时候偏移2个等。
怎么算出的:所以结果就是初始值加上这些偏移量。直接把0x200换成十进制,就是512,偏移结构体大小的时候就是偏移32,那么就是32偏移512次,就是32*512=16384,换成HEX就是4000,所以第一个结果总是0x10004000
第二点,就是算的时候,因为16进制的加减很难,所以都换成10进制好了,然后算出来了再换回来。
最开始都不偏移的时候如下,即都是初始地址:
强转成char指针后是如下:
但是如果强转成int 型指针,即(int *)p,则结果为
如果强转成long型,即(long*)p,则结果为
如果强转成short型,即2字节,即(short*)p,则结果为
总结:+号在这里是偏移的意思,不是值相加
指针的类型就多少(字节),就是一次偏移多少个单位(字节)
结构体也是一种数据类型,和int ,short等一样,所以把它换成char类型需要强转
但是结构体类型指针不需要在*前加类型名,int ,char等这样的,要看是不是结构体类型自己回去找。