程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> 對象-C++怎麼打印函數地址內存結構是什麼樣的啊

對象-C++怎麼打印函數地址內存結構是什麼樣的啊

編輯:編程綜合問答
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”是符號位?

問題有點多謝謝各位大哥

最佳回答:


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,沒打印出來

renzhe20092584
renzhe20092584
renzhe20092584
renzhe20092584
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved