2014-02-28 62 views
-1

編譯器(在這裏我正在考慮gcc,但我猜它可能是任何C編譯器)如何使用malloc返回的指針在使用前不需要轉換)關心變量來自哪裏? 爲什麼區分指針是否來自malloc? 它只是一些編譯器使用的優化,還是在C標準中提到的?不同於其他(void *)指針

+1

顯示一些代碼來說明您的觀點。 –

回答

5

不像其他(無效*)指針

其實C中沒有void *需要鑄造,沒有什麼特別之處malloc在這方面。只要你處理對象指針(即不是函數指針),你就可以自動轉換爲void *

,或者它在C標準


提到我們什麼時候需要有明確的轉換?標準這樣說:

6.5.4轉換操作符

涉及指針的轉換,不包括依據的6.5.16.1的 限制允許的其他,應當有明確的轉換來指定。

轉發至該節:

[...]一個操作數是一個指針,指向的對象類型,以及另一個是 指針空隙[的合格或不合格的版本.. 。]

所以你有它。 void *沒有明確的演員要求。