jeffreylee的个人主页

http://www.qtcn.org/bbs/u/139371  [收藏] [复制]

jeffreylee

宁静致远

  • 20

    关注

  • 27

    粉丝

  • 117

    访客

  • 等级:侠客
  • 身份:论坛版主
  • 总积分:158
  • 男,1971-01-21

最后登录:2023-07-06

更多资料

日志

((M *)0)->b;肯定会出错,而&(((M *)0)->b)这样写为什么不报错?

2013-01-17 20:11
int a = ((M *)0)->b;肯定会出错。为什么int a = &(((M *)0)->b);就没有问题呢?
答:((M *)0)->p是得到p的地址后取出p的值由于p所指向的是不可读地址,因此引发CPU一般保护异常,而&(((M *)0)->p)从语义上看,代码编写人是想得到p成员的偏移量,程序运行时,虽然0加上p的偏移的内存空间不可读,但是并没有读取内存的值,而是直接将这个值也就是偏移赋给了变量,所以不会引发CPU一般保护异常,所以没有问题。
分类:默认分类|回复:0|浏览:877|全站可见|转载
 

Powered by phpwind v8.7 Certificate Copyright Time now is:05-19 12:22
©2005-2016 QTCN开发网 版权所有 Gzip disabled