gpt4 book ai didi

c - 为什么字符值存储为整数?

转载 作者:行者123 更新时间:2023-11-30 21:40:29 26 4
gpt4 key购买 nike

现在我正在写代码......

#include <stdio.h>
int main()

{
int c;
printf("I'm waiting for a character: ");
c = getchar();
printf("I waited d for the '%c' character\n", c);
return 0;
}

如您所见,我已将 c 声明为整数,因此该值应在 0-9 之间,但接下来的第三行我只是使用了 printf() 转换 char 类型值的字符。不知何故它起作用了!那么让它发挥作用的背后原因是什么?

最佳答案

答案分为两部分。

您输入了

c = getchar();

但是 getchar 显然返回字符,那么这如何工作呢?嗯,实际上,它工作得很好,部分原因是 getchar 的返回值实际上是一个 int (这样它也可以返回非 charEOF)。所以这里根本没有问题。

然后如何传递 int 来让 %c 打印出来?通常,当您调用 printf 时,传递的参数类型与格式说明符期望的类型正确匹配非常重要。 (例如,传递 int 并尝试使用 %f 打印它是一个真正的错误。)但是 C 并不总是完全按照您编写的方式将类型传递给函数有时它们会被转换(“升级”)为更大的常见类型。

应用这些转换的一次(在现代 C 中,几乎是唯一一次)是当您调用一个采用可变数量参数的函数时,例如 printf。在这种情况下,当您传递 charshort int 类型的参数时,它会自动向上转换为 int。因此用 %c 打印一个 int 值就可以了。 (另一个重要的提升是,当您传递 float 时,它会自动转换为 double。所以事实证明,您可以同时打印 floatdouble 使用 %f。)

事实上,在 C 语言中,字符确实是小整数,所以这一切都不足为奇。看到这一点的一种方法是稍微改变你的 printf 调用:

printf("I waited for the %d character\n", c);

现在,如果您输入 A,它会告诉您它是 65,因为在 ASCII 中,大写 A 的代码是 65。

关于c - 为什么字符值存储为整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49698709/

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