首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

(int*)*(int*)是何物?解决办法

2012-09-09 
(int*)*(int*)是何物?直接上代码:C/C++ codeclass Base {public:virtual void f() { cout Base::f

(int*)*(int*)是何物?
直接上代码:

C/C++ code
class Base {     public:            virtual void f() { cout << "Base::f" << endl; }            virtual void g() { cout << "Base::g" << endl; }            virtual void h() { cout << "Base::h" << endl; } };Base b;cout << (int*)*(int*)(&b) << endl;

这里的(int*)*(int*)(&b)是什么意思,(int*)*(int*)具体如何解释?


[解决办法]
Base的table:
C/C++ code
函数f的地址函数g的地址函数h的地址
[解决办法]
C/C++ code
#include <iostream>using namespace std;class Base {public:    virtual void f() { cout << "Base::f" << endl; }    virtual void g() { cout << "Base::g" << endl; }    virtual void h() { cout << "Base::h" << endl; }};int main(){        Base b;    cout << sizeof(b) << endl;    cout << (int*)*(int*)(&b) << endl;        return 0;}
[解决办法]
根据观察可以得出以下几个简单结论:
1. 变量b里保存的是虚函数指针表的地址,这也是变量b唯一内容;
2. 语句(int*)*(int*)(&b)的含义是:取出变量b第一个整形单元的内容,然后转换成int *指针.

c++的一些书籍会介绍,在带虚函数的类中,每个该类的存储空间上首先存储的是该类的虚函数表.
当然,更深一步的介绍会告诉你说这个结论并不完全对,取决于编译器的实现.

热点排行