【待完善】一个面试题-- int a = ‘(int)(((int *)0)+4) ’的值是多少?

  • int a = (int)(((int *)0)+4); 的值是多少?
  • You can get 16, but you can also get a crash.
    • 自己算出来是 4,但是值不对,给定的是16,没看清楚是咋回事,同时看到涉及到内存,说了会报错,但是没正面回答其值是多少。
    • 最后情况在自己的程序中进行验证,本地确实报错,都没能编译通过。
      • 验证了下,用gcc编译有warning(执行结果为 16),用g++是直接出错,不能通过。
    • 解释:
      • 将(int *)0把整数0强制转换为int *型执政,指针的指向元素是int型,占4字节,
      • (int *)0+4:“指针+整数”,这时整数被解释为元素个数,1元素4字节,4个元素是16字节,
        • (int *)0+4 是一个地址,相当于0地址偏移了16字节后的地址,为 0x010
      • 最前面的(int)又把 int*指针类型16强制为普通的int,所以32/64位平台下为16(这里和平台的关系是int所占字节数)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值