2010-07-28 79 views
4

可能重複:
What is the size of void?sizeof(void)在C中等於1?

大家好! 我正在使用gcc編譯我的C程序,只是偶然發現sizeof(void)是C中的1個字節。

對此有任何解釋嗎?我一直認爲它是零(如果它確實沒有存儲)!

謝謝!

+1

'void'沒有大小,因爲'void'是一個不完整的類型。你不能採用不完整類型的'sizeof'。 – GManNickG 2010-07-28 07:11:00

+0

如果我嘗試用這個標題創建一個SO問題,我很快就會在這個問題上得到很多「相關問題」...... – pascal 2010-07-28 07:13:01

回答

0

通常你不會問sizeof(void),因爲你永遠不會使用void類型。我猜你正在試驗的行爲取決於具體的編譯器。在我的gcc上它也返回1。

6

這是gcc的非標準擴展,但有一個理由。當您進行指針運算時,添加或刪除一個單位意味着添加或刪除指向大小的對象。因此,將sizeof(void)定義爲1有助於將void*定義爲指向字節的指針(無類型的存儲器地址)。否則,當p爲void*時,使用指針運算如p+1 == p會出現令人驚訝的行爲。

標準的方法是使用char *來達到這種目的(指向字節的指針)。