#include <iostream> class TA { public: int a; void TA1() { //this->a = 5; printf("a=%d\n", a); } void TA2() { printf("hha\n"); } }; union UU { void* p; void(TA::*pfn)(); }; typedef void(*Func)(TA*); int main(int argc, char** argv) { TA ta; ta.a = 2; UU u; u.pfn = &TA::TA1; printf("%p\n", (char*)u.p); Func jj = (Func)((char*)u.p); jj(&ta); printf("%p\n", (char*)u.p + 0xbe);//两个函数的地址相差0xbe, 这个值是预先调试看的。 Func jj1111 = (Func)((char*)u.p + 0xbe); jj1111(&ta); u.pfn = &TA::TA2; printf("%p\n", (char*)u.p); Func jj2 = (Func)((char*)u.p); jj2(&ta); std::cout << &TA::TA1 << std::endl; return 0; }
简单来说就是 通过union的特性来获取到地址。
参考:https://blog.csdn.net/lhh_qrsly/article/details/124937814
标签:char,void,C++,---,地址,Func,printf,ta,TA From: https://www.cnblogs.com/linxisuo/p/16931686.html