指针的偏移计算---易错点

↑上面答案改一下,在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等这样的,要看是不是结构体类型自己回去找。

          

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值