![](/img/trans.png)
[英]Data Variables/Constants and Type int Constants (C Primer Plus)
[英]If character constants are of type `int', why are they assigned to variables of type `char`?
C11標准說字符常量(例如, 'x'
)是int
類型,而不是char
。 這令我感到驚訝和困惑(特別是作為一個相對初學者)。 我遇到了這個答案為什么C字符文字而不是字符? 這有點清楚,但仍然讓我想知道為什么它似乎是常規練習(至少在我遇到的所有書籍和教程中)將字符常量分配給聲明為char
類型的變量。 例如,我們為什么這樣做
char initial = 's';
並不是
int initial = 's';
然后,當將類型為int
的常量賦給char
類型的變量時會發生什么? 它是否切換為char
型?
字符文字屬於int
類型的事實只是故事的一半。 另一半是它們的值在char
范圍內。 這很關鍵,因為如果你分配
char a = 65;
你沒有得到警告,但如果你這樣做
char b = 56789;
你收到警告
為什么我們做
char initial = 's'
而不是int initial = 's'
?
這使您可以在將變量分配給char
類型的另一個變量或char[]
數組的元素時避免強制轉換:
char str[2];
str[0] = initial; // no cast when "initial" is of type "char"
有一種情況需要對存儲char
變量使用int
- 當你使用getc
/ fgetc
功能時,結果必須是int
,而不是char
,以便與EOF
進行比較。
考慮float x = 3.0;
這將一個double
3.0
設置為float
。 代碼可能是float x = 3.0f;
。 最終結果是一樣的。
與char ch = 5;
相同char ch = 5;
。 vs char ch = (char)5;
在這兩種情況下, ch
都獲得相同的值。
最后,考慮C最初專注於類型int
,並且double
- 就是這樣。 float
, short
, char
, long
等類型只是偏離真正核心類型的C.(即使是unsigned
, bool
也是事后的。)
將int類型的常量賦給char類型的變量會發生什么? 它是否切換為char型?
常數仍然是它的類型。 為char
int
類型的常量不會更改常量的類型。 當原始int
值超出char
范圍然后保存在char
時,可以更改的值是int
。
如果將一個int
值賦給char
變量,則該值將轉換為char
類型。
聲明變量char
而不是int
原因有幾個。 一種是節省內存(盡管在數組或其他聚合中使用時更為相關)。 另一個是明確表示它旨在保持char
值。 另一種是隱含地限制其價值范圍。 在某些情況下,您可能希望獲取其地址以獲取char *
,在這種情況下,您將無法使用int
變量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.