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

关于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()相当于调用第一个虚函数