簡體   English   中英

如果字符常量是`int'類型,為什么它們被分配給`char`類型的變量?

[英]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 - 就是這樣。 floatshortcharlong等類型只是偏離真正核心類型的C.(即使是unsignedbool也是事后的。)


將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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM