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

关于pFun = (Fun)*((int*)*(int*)(&b)); 这行代码左面第一个解引符号是什么意思

2013-07-01 
关于pFun (Fun)*((int*)*(int*)(&b)) 这行代码左边第一个解引符号是什么意思?typedef void(*Fun)(void)

关于pFun = (Fun)*((int*)*(int*)(&b)); 这行代码左边第一个解引符号是什么意思?
typedef void(*Fun)(void);
      Base b;
      Fun pFun = NULL;
      cout << "虚函数表地址:" << (int*)(&b) << endl;
      cout << "虚函数表 — 第一个函数地址:" << (int*)*(int*)(&b) << endl;
     // Invoke the first virtual function 
      pFun = (Fun)*((int*)*(int*)(&b));
      pFun();
上面是代码,我们知道如果(int*)*(int*)(&b)表示虚函数表中第一个函数地址,强制转换成void(*Fun)(void)指针,直接(Fun)((int*)*(int*)(&b))不就行了么,为什么要加“*”呢,如果左边第一个“*”是对(int*)*(int*)(&b)进行解引操作,完全就无法理解了,好像与代码意图不符。 函数 指针 typedef C++
[解决办法]
(int*)*(int*)(&b) 这里面是存贮了一个地址。
*地址 就是到了取该地址的值
[解决办法]
觉得(int*)(&b)是虚函数表指针的地址

(int*)*(int*)(&b)等于虚表指针的值,也就是虚函数表的地址(虚函数表应该相当于一个指针数组)

*((int*)*(int*)(&b))这个才是第一个虚函数的地址
[解决办法]
你的代码中,pFun是个函数指针,它的值等于第一个虚函数的地址,所以pFun()相当于调用第一个虚函数

热点排行