我有一小段代碼。 當我在我的DEVC++ GNU編譯器運行此它顯示下面的輸出:爲什麼編譯器將字符視爲整數?
main()
{ char b = 'a';
printf ("%d,", sizeof ('a'));
printf ("%d", sizeof (b));
getch();
}
OUTPUT:4,1
爲什麼'a'
當作整數,而作爲b
作爲處理只有一個字符常量?
我有一小段代碼。 當我在我的DEVC++ GNU編譯器運行此它顯示下面的輸出:爲什麼編譯器將字符視爲整數?
main()
{ char b = 'a';
printf ("%d,", sizeof ('a'));
printf ("%d", sizeof (b));
getch();
}
OUTPUT:4,1
爲什麼'a'
當作整數,而作爲b
作爲處理只有一個字符常量?
由於字符文字是int
類型的,並且在C.
char
所以sizeof 'a' == sizeof (int)
。
請注意,在C++中,字符文字類型爲char
,因此sizeof 'a' == sizeof (char)
。
這就是它在C中的方式。這就是語言最初的定義。至於爲什麼......那麼幾乎C中的所有東西都是一個int
,除非有很好的理由讓它成爲別的東西。因此,歷史上C中的字符常量的類型爲int
。
注順便說一句,在C命名'a'
被稱爲不斷,不文字。 C有字符串文字,沒有其他文字。
在C中,字符常量的類型爲int。
在C++中,只包含一個字符的字符常量的類型爲char,它是一個整數類型。
在C和C++中,寬字符文字的類型爲wchar_t,而多字符文字的類型爲int。
從IBM XL C/C++文檔
字符常量包含的字符序列或逃生括在單引號符號 序列,例如「C」。 字符文字可能以字母L爲前綴,例如 L'c'。沒有L前綴的字符文字是普通的 字符文字或窄字符文字。具有L前綴的字符文字 是寬字符文字。包含多個字符或轉義序列的普通字符 (不包括單引號('),反斜槓()或換行字符) 是一個多字符文字。
字符文字具有以下形式:
.---------------------.
V |
>>-+---+--'----+-character-------+-+--'------------------------><
'-L-' '-escape_sequence-'
至少一個字符或轉義序列必須出現在字符 文字。這些字符可以來自源程序字符集 (不包括單引號,反斜槓和換行符號)。 A 字符文字必須出現在單個邏輯源代碼行上。
Ç字符文字的類型爲int
我試圖找到這個標準。你知道它在哪裏嗎? – chris 2012-07-26 15:24:59
@chris(C99,6.4 .4.4p10)「整數字符常量的類型爲int。」 – ouah 2012-07-26 15:25:39
sizeof(int)是4,sizeof(char)是1. – Vernon 2012-07-26 15:31:20