社区
C++ 语言
帖子详情
&(((CPoint*)0)->y),这条语句居然没有错,但去掉前面的"&"就会出错,怎么理解?
jmcooler
2005-09-14 04:15:37
&(((CPoint*)0)->y),不仅不会出错,而且还是成员变量y的地址偏移。
即它算出的是y在CPoint里的地址偏移量。
但,把最前面那个&去掉,就不行了,运行就会有错。
...全文
242
9
打赏
收藏
&(((CPoint*)0)->y),这条语句居然没有错,但去掉前面的"&"就会出错,怎么理解?
&(((CPoint*)0)->y),不仅不会出错,而且还是成员变量y的地址偏移。 即它算出的是y在CPoint里的地址偏移量。 但,把最前面那个&去掉,就不行了,运行就会有错。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
goodluckyxl
2005-09-14
打赏
举报
回复
去掉了&后,形式如下
((CPoint*)0)->y
这样的操作当然会有问题了
0不过是强制转化后的一个地址映象是CPoint*指针类型
根本在此地址上未生成对象
操作此对象当然是不允许的
Jagen在路上
2005-09-14
打赏
举报
回复
取地址自然不会错,但是使用它肯定就有问题了。
megaboy
2005-09-14
打赏
举报
回复
先把整数0通过类型转换(CPoint*)转换为指向CPoint类型的地址,然后把此地址开始的一段内存看作CPoint类型的数据,->y指出这个CPoint类型的数据里面的y成员,再通过&取这个成员的地址,由于起始地址是0,因此这个值就是y成员的偏移量。
wanguodu
2005-09-14
打赏
举报
回复
把取地址和取值区分开就好理解了。取变量地址的时候,CPU不需要先访问该变量的值;但取值的时候却必须先计算地址。
我们只有在对地址0及其附近的内存进行读、写的时候,也就是取值的时候,才会产生非法内存访问异常。
楼主的代码形式上看,好像是先取((CPoint*)0)->y,再取其地址似的,很容易迷惑人。事实上,编译器是不会这么做的,它是直接计算地址的。
jmcooler
2005-09-14
打赏
举报
回复
是著名的Offset宏,但怎么来理解这条语句?
kobefly
2005-09-14
打赏
举报
回复
对亚
offset宏嘛
xiao_xiao_zi
2005-09-14
打赏
举报
回复
感觉是优化的结果
原来取y的地址,是该CPoint对象的基地址,加上y的偏移
现在基地址是0,就只剩下偏移量了
至于加上&不会崩溃,不加会崩溃
感觉是不加的时候因为要进行取值操作,而对象地址为0,所以崩溃
加了&后编译器优化为地址操作
不知道对不对,牛人来说说
july81
2005-09-14
打赏
举报
回复
你要去的地址当然需要&操作符了。
这个就是著名的offset宏的实现。
healer_kx
2005-09-14
打赏
举报
回复
一会试一试,我先JSP,不会是优化的问题吧?
VC笔记(四)
关于VC的一些常见的小问题总结(1) 改变对话框中某个控件的字体颜色 /////////////////////////////////////////////////////////// if(nCtlColor== CTLCOLOR_EDIT ) { pWnd->GetDlgCtrlID(); pDC->SetTextColor(RGB(255,0,
多工具条编程秘技
声明:工具栏是一个比较传统的话题,如果您认为本文的内容比较陈旧的话,请您不要阅读,以免浪费你的宝贵精力和时间。多工具条编程秘技李安东2001年10月1日关键字: 工具栏 真彩色按钮 按钮标签对于一个应用程序来说,用户界面始终是至关重要的问题之一,因为它不仅决定了用户使用的方便程度,而且还能增加用户对软件的信赖程度。下面就如何利用VC++ 6.0编写带有多个工具条
visual C++学习使用开发笔记(2008-08-31)
知识点:学了就要记住才可以(2008-08-31)1、关于inflaterect和deflaterect简单的说就是左(left) 上(top) 右(right) 下(bottom) 下面列出其全部重载函数 CRect::InflateRect void InflateRect( int x, int y ); void InflateRect( SIZE size ); void
使用VC2005一些问题及解决方案(一)
首先是我使用VC2005在不通阶段的不通感受: 刚开始安装VS2005时候感觉:真是大啊!装了我一个上午!!而且运行个VC有时能耗我好大的内存。。 刚使用VC2005时候的感受:界面挺不
错
,貌似功能更强大,对C++标准支持的很好,还可以用我最喜欢的Comic Sans MS字体,还支持代码收缩等等。。虽然比较慢,但是不像VC6.0那样老是出现编译死机的情况。 开始用VC2005学习写东西的时...
VC/MFC Q
&
A 200407
<script type="text/javascript"
C++ 语言
64,683
社区成员
250,491
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章