社区
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;
}
这个代码能正常运行,请解释一下,谢谢,并希望提供好的解决方法。
...全文
190
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
顶一下
你的 Python
代码
需要
解释一下
了
本文探讨了Python编程语言的编译原理,介绍了CPython、PyPy和Numba等常见编译器的类型及用途,强调了在机器学习项目中选择编译器的关键因素,如性能、库支持和GPU加速。
详细
解释一下
下面的java
代码
博客详细解释了一段Java
代码
,该
代码
实现将集合转换为Map的工具方法,提供处理键冲突策略,运用了Java 8函数式编程特性。还阐述了泛型中super和extends通配符的含义、作用及在
代码
中的应用,使
代码
更通用灵活。
解释一下
下面的java
代码
本文对一段Java
代码
进行解释,该
代码
定义了全局异常处理器和请求体建议器,用于拦截和修改传入的HTTP请求体。详细解读了
代码
中各注解和方法的作用,指出
代码
在请求体读取前触发,可对请求体进行预处理和验证,实现跨切面功能。
求大神给
解释一下
lbp
代码
本文深入解析了局部二值模式(LBP)算法的实现
代码
,详细介绍了如何通过MATLAB函数计算图像的旋转不变LBP直方图,适用于至少3x3像素大小的图片。通过分解图像并应用特定权重和比较操作,生成了用于纹理分析和图像识别的有效特征。
你的 Python
代码
需要
解释一下
了!
本文探讨了Python编程语言的编译原理,介绍了CPython、PyPy和Numba等常见编译器,强调了性能、兼容性和内存使用等因素在选择编译器时的重要性,并为机器学习项目提供了编译器选择建议。
C++ 语言
65,211
社区成员
250,515
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章