renzhe20092584 2015-08-24 15:45 采纳率: 100%
浏览 3941
已采纳

C++怎么打印函数地址内存结构是什么样的啊

#include <iostream>
using namespace std;
class Base
{
public:
    Base(){};
    ~Base(void){};

    void print(){};
    void address1(){};
    void address2(){};

public:
    int *aa;
    int iBase;
};

void (Base::*pf1) ();
void (Base::*pf2) ();

int main(int argc, const char * argv[]) {
    Base *b = new Base();

    cout << "对象地址:" << b << endl;
    cout << "成员*aa:   "<< &b->iBase << endl;
    cout << "成员iBase:   "<< &b->aa << endl;

    pf1 = &Base::address1;
    pf2 = &Base::address2;

    cout << "pf1:" << &pf1 << endl;
    cout << "pf2:" << &pf2 << endl;

    printf("pf1:%p \n", pf1);
    printf("pf2:%p \n", pf2);

    return 0;
}

打印结果:
对象地址:0x100105470
成员*aa: 0x100105478
成员iBase: 0x100105470
pf1:0x1000020e8
pf2:0x1000020f8
pf1:0x100000d20
pf2:0x100000d30

测试环境:mac 64位系统 应该跟 windows 64位效果差不多吧

1.这种打印 c++ 函数的地址方式对吗?

2.对象地址:0x100105470 和 成员iBase: 0x100105470 地址相同?

3.pf1:0x1000020e8 与 pf1:0x100000d20 这两个哪个才是这正的函数地址?

4.pf1:0x1000020e8 与 pf2:0x1000020f8 这两个地址差别怎么理解

5.0x100105470 这个地址怎么理解啊
0x代表16进制 后面的呢 1001 0547 0 怎么是 9 位啊 应该是 8位啊 “1”是符号位?

问题有点多谢谢各位大哥

  • 写回答

6条回答 默认 最新

  • 假正经的班长 2015-08-25 03:57
    关注

    1.这种打印 c++ 函数的地址方式对吗?//打印地址 用 &pf1 取值就可以了
    2.对象地址:0x100105470 和 成员iBase: 0x100105470 地址相同? //这个类结构里边,就两个成员且无虚函数,所以对象开始地址也是第一个成员的地址
    3.pf1:0x1000020e8 与 pf1:0x100000d20 这两个哪个才是这正的函数地址? //前者,printf 忘了 &
    4.pf1:0x1000020e8 与 pf2:0x1000020f8 这两个地址差别怎么理解 //说明 pf1所指函数实际占用16字节空间?
    5.0x100105470 这个地址怎么理解啊
    0x代表16进制 后面的呢 1001 0547 0 怎么是 9 位啊 应该是 8位啊 “1”是符号位? //1当然不是符号位,这都哪跟哪! 可能前边还有0,没打印出来

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

悬赏问题

  • ¥15 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题