2010-07-26 78 views
5

考慮程序運營商的sizeof(c)中

main() 
{ 
printf("%d %d %d",sizeof('3'),sizeof("3"),sizeof(3)); 
} 

gcc編譯輸出爲:

4 2 4 

爲什麼會這樣呢?

+6

檢查sizeof(int)和sizeof(char)和sizeof(char *) – Vijay 2010-07-26 11:07:57

+8

'sizeof'不是函數,而是運算符。 – 2010-07-26 11:09:18

+0

@benjamin按鈕:不同的順序將匹配OP的質詢:) – akira 2010-07-26 11:10:00

回答

13

假設是在32位的系統上運行:

的sizeof字符文字「3」是4,因爲字符文字是在C語言中(但不是C++)整數。

sizeof「3」是2,因爲它是長度爲2(數字3加上NULL終止符)的數組字面量。

sizeof literal 3是4,因爲它是一個int。

+2

這個問題的答案有助於解釋一些 - http://stackoverflow.com/questions/2252033/in-c-why-is-sizeofchar-1-when-a-is-an-int – 2010-07-26 11:11:32

+1

爲什麼'3'一個整數? – Mohit 2010-07-26 11:12:33

+1

在C中,char文字是int類型的。與C++不同。 – 2010-07-26 11:15:04

0

的sizeof()輸出取決於編譯器使用的是

12

有幾點要記住:

  1. sizeof不是一個函數,這是一個運營商。它返回一個類型的大小,單位爲sizeof char。換句話說sizeof char始終是1。
  2. 「3」是int
  3. 「3」是一個char[2],則字符3空終止。
  4. 3爲int

有了這些很容易解釋的差異:

  1. 一個int需要4個char S的空間以將其保持
  2. char[2]自然只需要2 char小號
+1

提及'sizeof'是一個運算符。我的Pet peeve:'sizeof(char)'中的括號屬於類型(需要它們的地方)。他們可以(也應該)在'sizeof'3''中省略。 – schot 2010-07-26 11:48:37

3

要引用K & R,

每個編譯器可以自由地選擇其自身 硬件 適當的大小,只服從於所述 限制,即短褲和整數是 至少16位,多頭是至少 32位,並且短不超過 int,它不再長於long。