社区
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;
}
这个代码能正常运行,请解释一下,谢谢,并希望提供好的解决方法。
...全文
174
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语言编写的
代码
程序经过编译解释才能执行,C语言的题目,谁帮忙做下,
谢谢
,
C语言的题目,谁帮忙做下,
谢谢
,0一. 选择题:(2*10=20)1.用C语言编写的
代码
程序( )。A) 可立即执行B) 是一个源程序C) 经过编译即可执行D) 经过编译解释才能执行2.在C语言中,数字029是一个( )。A) 八进制数 B) 十六进制数 C) 十进制数 D) 非法数3.C语言中的标识符只能由字母、数字和下划线三种字符组成,且第一个字符( )。A)必须为字母B)必须为下划线C)必须...
如何查看源
代码
及一些
代码
的解释
如何查看源
代码
及一些
代码
的解释
C语言入门常写的三个
代码
今天我们要看的是C语言常写的三个
代码
。 打印100~200之间的素数 常用的方法是试除法,
解释一下
什么是试除法。 “试除”顾名思义就是不断的尝试能否整除,比如要判断一个自然数x是否是质数,就不断用这个数x去除以小于x且大于1的自然数,只要有一个能整除,则x就是合数,否则x是质数。同样的思想对100~200之间的数判断哪些是素数,哪些不是素数。 我们可以从简到繁的思路依次看到它的多种境界。 首先最...
java三个数排序比较大小的完整
代码
,并给出详细解释,初学者,
谢谢
java三个数排序比较大小的完整
代码
,并给出详细解释,初学者,
谢谢
ycip88c5级分类:其他被浏览63次2014.11.17 Dragon丶脩_ 采纳率:48%5级2014.11.17 public static void main(String[] args) { // 这是你的三个数
代码
规范七大原则_设计模式之高质量
代码
如果有人问你,“什么样的
代码
是好
代码
”,你会怎样回答呢?0,什么是高质量
代码
我觉得回答这个问题,应该从两个方面考虑。从业务角度考虑。首先,在公司开发一款软件,应该是业务在驱动。所以,从这个角度来说,
代码
第一个应该满足的是业务需求,如果连最基本的业务需求都满足不了,别的也就无从谈起。从纯
代码
层面考虑。本篇我们重点要介绍的也就是这个问题。那从纯
代码
层面来说,什么样的
代码
才是好
代码
呢?通常会有...
C++ 语言
65,206
社区成员
250,519
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章