谁能解释一下这个代码,谢谢

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 打赏 收藏 转发到动态 举报
写回复
用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
顶一下

64,670

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧