0
有這樣的代碼:爲什麼表達式a()和(****&a)()調用相同的函數?
void a() { }
int main(){
a();
(****&a)();
return 0;
}
它是如何發生的聲明(****&a)();
具有作爲a();
同樣的效果?
有這樣的代碼:爲什麼表達式a()和(****&a)()調用相同的函數?
void a() { }
int main(){
a();
(****&a)();
return 0;
}
它是如何發生的聲明(****&a)();
具有作爲a();
同樣的效果?
這一切都由於功能到指針轉換(§4.3):「指針T
」
功能類型
T
的左值可以被轉換成類型的prvalue結果是一個指向函數的指針。
&a
首先給你一個指向a
的指針。然後你用*
將它解引用給你自己的函數。然後嘗試解除引用該函數,但由於不能,它會進行函數到指針的轉換以再次獲取指針。您將該指針與*
取消引用,依此類推。
最後(****&a)
表示函數a
,您可以調用它,因爲您可以將()
應用於函數而不進行函數到指針的轉換。
'(********************************************* ************* &a)();'也是。 – deepmax
哦,夥計們,真的嗎?[12分鐘的價值區別?](http://stackoverflow.com/questions/16625902/function-variable-代替-的指針到功能) – 2013-05-18 15:46:19