- 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所占字节数)