考慮程序運營商的sizeof(c)中
main()
{
printf("%d %d %d",sizeof('3'),sizeof("3"),sizeof(3));
}
從gcc編譯輸出爲:
4 2 4
爲什麼會這樣呢?
考慮程序運營商的sizeof(c)中
main()
{
printf("%d %d %d",sizeof('3'),sizeof("3"),sizeof(3));
}
從gcc編譯輸出爲:
4 2 4
爲什麼會這樣呢?
假設是在32位的系統上運行:
的sizeof字符文字「3」是4,因爲字符文字是在C語言中(但不是C++)整數。
sizeof「3」是2,因爲它是長度爲2(數字3加上NULL終止符)的數組字面量。
sizeof literal 3是4,因爲它是一個int。
這個問題的答案有助於解釋一些 - http://stackoverflow.com/questions/2252033/in-c-why-is-sizeofchar-1-when-a-is-an-int – 2010-07-26 11:11:32
爲什麼'3'一個整數? – Mohit 2010-07-26 11:12:33
在C中,char文字是int類型的。與C++不同。 – 2010-07-26 11:15:04
的sizeof()輸出取決於編譯器使用的是
有幾點要記住:
sizeof
不是一個函數,這是一個運營商。它返回一個類型的大小,單位爲sizeof char
。換句話說sizeof char
始終是1。int
char[2]
,則字符3空終止。int
有了這些很容易解釋的差異:
int
需要4個char
S的空間以將其保持char[2]
自然只需要2 char
小號提及'sizeof'是一個運算符。我的Pet peeve:'sizeof(char)'中的括號屬於類型(需要它們的地方)。他們可以(也應該)在'sizeof'3''中省略。 – schot 2010-07-26 11:48:37
要引用K & R,
每個編譯器可以自由地選擇其自身 硬件 適當的大小,只服從於所述 限制,即短褲和整數是 至少16位,多頭是至少 32位,並且短不超過 int,它不再長於long。
檢查sizeof(int)和sizeof(char)和sizeof(char *) – Vijay 2010-07-26 11:07:57
'sizeof'不是函數,而是運算符。 – 2010-07-26 11:09:18
@benjamin按鈕:不同的順序將匹配OP的質詢:) – akira 2010-07-26 11:10:00