小编nf7*_*nf7的帖子

从K&R的"C编程语言"中理解关于char和int类型的段落

关于第1章:Kernighan和Ritchie的教程介绍中的这段经文:C编程语言(我已经加粗了我需要澄清的具体部分,并在下面详细阐述):

给定getchar和putchar,您可以编写大量有用的代码,而无需了解有关输入和输出的更多信息.最简单的例子是一个程序,一次将其输入复制到输出一个字符:读取字符while(字符不是文件结束指示符)输出字符只读取读取字符将其转换为C给出:

#include <stdio.h>
/* copy input to output; 1st version */ main()
{
       int c;
       c = getchar();
       while (c != EOF) {
           putchar(c);
           c = getchar();
       }
}
Run Code Online (Sandbox Code Playgroud)

关系运算符!=表示"不等于".键盘或屏幕上似乎是一个字符,当然,就像其他一切一样,内部存储就像一个位模式.char类型专门用于存储此类字符数据,但可以使用任何整数类型.我们使用int是一个微妙但重要的原因.

问题是区分输入结束和有效数据.解决方案是当没有更多输入时,getchar返回一个独特的值,这个值不能与任何真实字符混淆.对于"文件结束",该值称为EOF.我们必须声明c是一个足够大的类型,以保存getchar返回的任何值.我们不能使用char,因为除了任何可能的char之外,c必须足够大以容纳EOF.因此我们使用int.

我的理解是Char是一种Int,但它只是更小(与Int16,Int32,Int64在其他语言中相同,但可以表示数字的大小).

我知道每个字符都可以用Char类型的整数表示,那么为什么EOF值不能表示为Char?是因为Char类型中的每个整数都已被考虑,甚至还有一个数字对于数据类型而言太大了?

任何解释或更正我的知识将不胜感激.

c types kernighan-and-ritchie

3
推荐指数
1
解决办法
433
查看次数

标签 统计

c ×1

kernighan-and-ritchie ×1

types ×1