社区
C++ 语言
帖子详情
谁能解释一下这个代码,谢谢
kane_yj
2005-04-07 07:21:47
class A
{
public:
A* getthis() {
return this;
}
};
#include <stdio.h>
int main(int argc, char* argv[])
{
A* a = 0;
printf("--- 0x%8x ---",a->getthis());
return 0;
}
这个代码能正常运行,请解释一下,谢谢,并希望提供好的解决方法。
...全文
161
9
打赏
收藏
谁能解释一下这个代码,谢谢
class A { public: A* getthis() { return this; } }; #include int main(int argc, char* argv[]) { A* a = 0; printf("--- 0x%8x ---",a->getthis()); return 0; } 这个代码能正常运行,请解释一下,谢谢,并希望提供好的解决方法。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
sttony
2005-04-07
打赏
举报
回复
如果类的成员函数没有access类自己的成员,即使类指针是无效的,调用类的函数也不会产生任何问题。比如
class A{ public: void print(){ printf("hello");}
。。。。
A* p=0;
p->print();照样会成功,不会有任何问题。因为这个函数被转换成
print(A* this);
因为你没有引用任何类的成员,所以,不会内存异常。当然楼主打印了this指针的内容,还是会正常的显示0x0000000;
如果类有一个成员比如class A{ public: void print(){ printf("hello%d", b); int b;}
那么print转换成了
print(A* this)
{printf("hello%d", this->b);};于是就异常了。
kane_yj
2005-04-07
打赏
举报
回复
问题我已经找到原因了:
a->getthis();调用的时候,a作为getthis的第一个参数mov ecx; 这个时候,不管什么都不会有错(一般情况下都是this指针),如果getthis中有操作类成员变量的情形时,肯定就会报错的。
唉,看问题还是看深点好。
szws
2005-04-07
打赏
举报
回复
printf("--- 0x%8x ---",a->getthis());
输出肯定是:--- 0x(普通字符串)原样输出
%8x 十六进制,而且占8位,不足空格替代!
---普通字符串
a->getthis())是一个空指针,即NULL
printf("--- 0x%8x ---",NULL);输出也是这个结果!!
pcboyxhy
2005-04-07
打赏
举报
回复
#include <stdio.h>
class A
{
public:
A* getthis() {
return this;
}
};
int main(int argc, char* argv[])
{
printf("--- 0x%8x ---",((A*)0)->getthis());
return 0;
}
就是这样都可以
又没有非法访问内存
277894613
2005-04-07
打赏
举报
回复
我的确有点晕
rocklabzhang
2005-04-07
打赏
举报
回复
有什么正常的么?
pcboyxhy
2005-04-07
打赏
举报
回复
有什么不正常的吗?
llf_hust
2005-04-07
打赏
举报
回复
这个程序应该不能运行吧,首先你的头文件都是C的,
A* a = 0; //你的指针没有分配空间,它不知道指向哪.应该A *a = new a;
zyccna
2005-04-07
打赏
举报
回复
up
顶一下
C++ 语言
64,670
社区成员
250,489
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章