gpt4 book ai didi

c - 如果字符常量是 `int' 类型,为什么它们被分配给 `char` 类型的变量?

转载 作者:行者123 更新时间:2023-12-01 08:56:45 24 4
gpt4 key购买 nike

C11 标准规定字符常量(例如,'x')是 int 类型,而不是 char 类型。这让我感到惊讶和困惑(尤其是作为一个相对初学者)。我遇到了这个答案 Why are C character literals ints instead of chars? ,这在一定程度上解决了问题,但仍然让我想知道为什么将字符常量分配给声明为 类型的变量似乎是常规做法(至少在我遇到的所有书籍和教程中)字符。例如,我们为什么要这样做

char initial = 's';

不是

int initial = 's';

然后,当 int 类型的常量被分配给 char 类型的变量时会发生什么?是否转换为 char 类型?

最佳答案

字 rune 字是 int 类型的事实只是故事的一半。另一半是它们的值在char范围内。这很关键,因为如果你分配

char a = 65;

你没有得到警告,但是如果你这样做了

char b = 56789;

您会收到警告。

why do we do char initial = 's' and not int initial = 's'?

这可以让您在将变量分配给类型为 char 的另一个变量或分配给 char[] 数组的元素时避免强制转换:

char str[2];
str[0] = initial; // no cast when "initial" is of type "char"

有一种情况,当您需要使用 int 来存储 char 的变量时 - 当您使用 getc/fgetc 功能,结果必须是 int,而不是 char,以便与 EOF 进行比较。

关于c - 如果字符常量是 `int' 类型,为什么它们被分配给 `char` 类型的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34192967/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com