求解惑:((Point3D*)0)->Display();

DontKissBossAss 2011-02-13 03:30:35
多次看到这中语法了。
其中一次是offsetof用法
#define offsetof(s,m)   (size_t)&reinterpret_cast<const volatile char&>((((s *)0)->m))


然后一次就是在读C++对象模型时,static函数的前身调用都是如下调用
Point3D 是一个类,Display 是Point3D的一个成员函数,对Display的调用能下如下格式:

((Point3D*)0)->Display();



但是我了解,windows系统,0-64K地地方是特殊空间,用来消除野指针等操作(这只是一个例子)
对这个空间的写操作会造成异常。

那么 上述代码这种,把NULL(0)强转成类型的做法是什么意思呢。?在线求解。
...全文
44 点赞 收藏 9
写回复
9 条回复
昵称很不好取 2011年02月13日
[Quote=引用 5 楼 dontkissbossass 的回复:]
引用 3 楼 thefirstz 的回复:
看看这篇文章:http://www.cppblog.com/aaxron/archive/2010/10/26/131317.html


麻烦问下,你这文章说的动态连编是指virtual 多态这些东西么?就是编译时期不知道调用哪一个,这样的函数。
[/Quote]
动态连编对应多态
回复 点赞
DontKissBossAss 2011年02月13日
[Quote=引用 7 楼 thefirstz 的回复:]
引用 6 楼 dontkissbossass 的回复:
引用 2 楼 thefirstz 的回复:
NULL指针不能读取,但这里并没有读取这个指针所指内存,只是调用了相应的成员函数
((Point3D*)0)->Display();这个只是调用了Display成员函数,而且这个函数不需要传递this指针内存块中的数据
offset也是一样的道理,只是返回一个结构中某个成员的偏移量,并不会产……
[/Quote]

谢谢。
回复 点赞
昵称很不好取 2011年02月13日
[Quote=引用 6 楼 dontkissbossass 的回复:]
引用 2 楼 thefirstz 的回复:
NULL指针不能读取,但这里并没有读取这个指针所指内存,只是调用了相应的成员函数
((Point3D*)0)->Display();这个只是调用了Display成员函数,而且这个函数不需要传递this指针内存块中的数据
offset也是一样的道理,只是返回一个结构中某个成员的偏移量,并不会产生读NULL指针的操作


看了你这文章,我对off……
[/Quote]
对了
回复 点赞
DontKissBossAss 2011年02月13日
[Quote=引用 2 楼 thefirstz 的回复:]
NULL指针不能读取,但这里并没有读取这个指针所指内存,只是调用了相应的成员函数
((Point3D*)0)->Display();这个只是调用了Display成员函数,而且这个函数不需要传递this指针内存块中的数据
offset也是一样的道理,只是返回一个结构中某个成员的偏移量,并不会产生读NULL指针的操作
[/Quote]

看了你这文章,我对offsetof的理解如下,请指点

在offsetof中,编译器也是只需要知道s的类型,然后呢,因为编译器已经知道结构体的内存布局,当你把起始地址指向0以后,&s->m 自然返回的就是m相对于0的地址,这其中没有涉及到0的读写操作。

靠了,编译器还藏着么多东西呢?
回复 点赞
DontKissBossAss 2011年02月13日
[Quote=引用 3 楼 thefirstz 的回复:]
看看这篇文章:http://www.cppblog.com/aaxron/archive/2010/10/26/131317.html
[/Quote]

麻烦问下,你这文章说的动态连编是指virtual 多态这些东西么?就是编译时期不知道调用哪一个,这样的函数。
回复 点赞
昵称很不好取 2011年02月13日
offsetof宏体(size_t)后面有个&,表示取这个成员的地址,而整个结构的地址是0,取该成员的地址得到的成员的想对该结构的偏移量
回复 点赞
昵称很不好取 2011年02月13日
昵称很不好取 2011年02月13日
NULL指针不能读取,但这里并没有读取这个指针所指内存,只是调用了相应的成员函数
((Point3D*)0)->Display();这个只是调用了Display成员函数,而且这个函数不需要传递this指针内存块中的数据
offset也是一样的道理,只是返回一个结构中某个成员的偏移量,并不会产生读NULL指针的操作
回复 点赞
zhangsongcui 2011年02月13日
据说是手机神马东西上面,调用系统内核程序的东西
不了解帮顶
回复 点赞
发动态
发帖子
C++ 语言
创建于2007-09-28

3.1w+

社区成员

24.8w+

社区内容

C++ 语言相关问题讨论,技术干货分享
社区公告
暂无公告