问题描述
- 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 ", pf1); printf("pf2:%p ", 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,没打印出来
解决方案二:
cout << "pf1:" << (int)pf1 << endl;
以这个为准。
解决方案三:
64位系统,地址不是32bit了。所以超过8位。
解决方案四:
1.这种打印 c++ 函数的地址方式对吗?//打印地址 用 &pf1 取值就可以了
cout << "pf1:" << pf1 << endl; 为什么打印固定式 1 ,pf1 明明是一个指针
int aa = 0;
int *a =&aa;
cout << "aa地址:" << a << endl;//打印出来的是一个地址
```
4.pf1:0x1000020e8 与 pf2:0x1000020f8 这两个地址差别怎么理解 //说明 pf1所指函数实际占用16字节空间?
16字节的空间怎么理解
```cpp
void address1(){
int a;
};
void address2(){};
//这两个都是差 16 字节
void address1(){
};
void address2(){};
最后一个还是关于地址的问题
函数地址:0x1001042a0
而打印 int 类型的地址
0x7fff5fbff838
64位地址应该都是占用 8 字节啊?
@西伯利亚冰
@cjqpker
解决方案五:
要想打印内存地址,用printf
解决方案六:
下班最后一次顶顶顶顶 回去终结结贴。
cout << "pf1:" << pf1 << endl; 为什么打印固定式 1 ,
cout << "pf1:" << pf1 << endl; 为什么打印固定式 1 ,
解决方案七:
打印函数地址