社区
C++ 语言
帖子详情
帮忙解释一((s *)0)->m为什么不会崩溃。。
sward2005
2011-01-19 05:17:32
#define offsetof(s,m) (size_t)&reinterpret_cast<const volatile char&>((((s *)0)->m))
代码如上,解释有分。。
...全文
212
15
打赏
收藏
帮忙解释一((s *)0)->m为什么不会崩溃。。
#define offsetof(s,m) (size_t)&reinterpret_cast((((s *)0)->m)) 代码如上,解释有分。。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
15 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
qq120848369
2011-01-19
打赏
举报
回复
就是算算结构体S里m变量与结构体首地址的偏移量,因为内存0作为首地址,所以只要取变量m的内存地址就是偏移量的大小了.
这里没有写内存,只是你想以S类型解释0地址开始的内存,就像:
int *p=(int*)malloc(sizeof(int)*4);
你只不过强制把内存当做int类型的,其实它不过就是一段内存而已,只不过是void而已.
机智的呆呆
2011-01-19
打赏
举报
回复
QJ是犯罪但YY不是~~~~lz懂得啊
qwqwqw408
2011-01-19
打赏
举报
回复
[Quote=引用 9 楼 bluesky12312388 的回复:]
引用楼主 sward2005 的回复:
#define offsetof(s,m) (size_t)&reinterpret_cast<const volatile char&>((((s *)0)->m))
代码如上,解释有分。。
LS各位都没说到点子上,这不是一般的指针,
如果我猜得没错的话应该是求成员变量在类对象中的偏移,
这个 (s *)0……
[/Quote]
1,这个宏无论是名字,还是其定义,都深深的出卖了它的作用,所以不需要猜。。
2,明明楼上有几位说的是正确的,至少4楼的说到点子上了,他解释了为什么不会崩溃,你偏要说没说到点子上,人家楼主问的并不是这个宏的作用。。
3,其实这就是个一般的指针,并非一定要是类的,结构体也行。
iambic
2011-01-19
打赏
举报
回复
C++标准好像没规定过程序要崩溃吧,任何情况下。
pengzhixi
2011-01-19
打赏
举报
回复
诶 在想知道类成员的偏移量的时候就是这么使用的。
xy_zhang
2011-01-19
打赏
举报
回复
[Quote=引用 9 楼 bluesky12312388 的回复:]
引用楼主 sward2005 的回复:
#define offsetof(s,m) (size_t)&reinterpret_cast<const volatile char&>((((s *)0)->m))
代码如上,解释有分。。
LS各位都没说到点子上,这不是一般的指针,
如果我猜得没错的话应该是求成员变量在类对象中的偏移,
这个 (s ……
[/Quote]
从宏定义的名字不就看出来了么……如果我猜的没错的话……
bluesky12312388
2011-01-19
打赏
举报
回复
[Quote=引用楼主 sward2005 的回复:]
#define offsetof(s,m) (size_t)&reinterpret_cast<const volatile char&>((((s *)0)->m))
代码如上,解释有分。。
[/Quote]
LS各位都没说到点子上,这不是一般的指针,
如果我猜得没错的话应该是求成员变量在类对象中的偏移,
这个 (s *)0 代表类对象开始。并不是指向地址为0的指针。
MYMGrub
2011-01-19
打赏
举报
回复
只是一个预处理的操作,定义了一个名字,又没有“叫”它,为什么会有问题呢?去掉“&”只写个定义在这应该也没有问题的..
zy020118
2011-01-19
打赏
举报
回复
"&"前面这个取址号的原因,这里只关心了地址,并没有对内存做任何操作。。
xy_zhang
2011-01-19
打赏
举报
回复
#define offsetof(s,m) (size_t)
&
reinterpret_cast<const volatile char&>((((s *)0)->m))
#define offsetof(s,m) (size_t)
&
(((s *)0)->m)
只是取了地址,没有解引用,不会崩溃。
ayw215
2011-01-19
打赏
举报
回复
没有写 只有读
bdmh
2011-01-19
打赏
举报
回复
为啥要崩溃,你没有对任何变量进行读写啊
珍惜生命远离CPP
2011-01-19
打赏
举报
回复
没有读写m所以不会崩溃。
精易模块[源码] V5.15
精易模块 V5.15 what’s new:(2015XXXX) 1、新增“线程_枚举”枚举指定进程ID中所有线程列表,成功返回线程数量,失败返回零。 2、删除“文件_取图标”与"文件_取图标句柄"功能重复。 3、优化“系统_创建桌面快捷...
C++笔试题目大全
样的: 1->2->3->4->5 通过反转后成为 5->4->3->2->1 。 最容易想到的方法遍历一遍链表,利用一个辅助指针,存储遍历过程中当前指针指向的下一个 元 素,然后将当前节点元素的指针反转后,利用已经存储的指针往...
C语言面试题分类->指针
C++为什么有那么多精彩?指针可以说是C/C++中的灵魂所在,虽然早期中pascal也有指针,但是和C/C++比起来不是一个级别的.今天为大家深入浅出的解析一下指针的有关笔试,面试题.所有题目来源网络,分析是我写的... 0.预备...
C/C++面试题-3 之2/3
bool CircleInList(Link* pHead){if(pHead = = NULL || pHead->next = = NULL)//无节点或只有一个节点并且无自环return (false);if(pHead->next = = pHead)//自环return (true);Link *pTemp1 = pHead;//step 1Link
记一次 .NET 某企业采购平台
崩溃
分析
一:背景 1. 讲故事前段时间有个朋友找到我,说他们的程序有偶发
崩溃
的情况,让我
帮忙
... 为什么会
崩溃
既然是程序的
崩溃
,我们可以像看蓝屏一下看dump文件,使用 !analyze -v 命令即可。0:000>!analyze-v ******...
C++ 语言
64,648
社区成员
250,476
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章