(*(void(*)())0)()

來源:互聯網
上載者:User

(*(void(*)())0)(),這是在C陷阱與缺陷中,關於解決電腦開機啟動後,硬體讀取首地址為0位置的子常式的代碼。

先看(*fp)(),fp是一個函數指標,*fp就是該指標所指向的函數,(*fp)()就是調用該函數的方式。

我們按照題目要求假設可以的話,則字面上可以寫成(*0)();但是,正如(*fp)(),運算子*必須要一個指標來作運算元,並且是函數指標,這樣經過運算子*作用後的結果才能作為函數被調用。因此 ,需要對0進行類型轉換,轉換後的意思可以描述為:指向傳回值為void類型的函數的指標,其等價於( void (*) () )0。(*0)()加上0轉換後的類型為(*(void(*)())0)()。

當然,一下方式的書寫可以使表達更明確:

typedef void (*func)();//定義了一個指向傳回值是void類型的函數指標

(*(func)0)(); //用上面的指標實現強制轉換

相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。