我是一个阅读 K&R 的初级程序员,我觉得这本书好像假设了很多以前的知识。让我感到困惑的一个方面是内存中变量的实际表示,或者我应该说存在。数据类型究竟为变量指定了什么?我不太清楚如何表达这个问题......但我会问几个问题,也许有人可以为我想出一个连贯的答案。
使用 getchar() 时,有人告诉我使用“int”类型比使用“char”类型更好,因为“int”可以保存更多值,而“char”只能保存 256 个值。由于我们可能需要变量来保存 EOF 值,因此我们需要超过 256 个,否则 EOF 值将与 256 个字符之一重叠。在我看来,我认为这是一堆空洞的盒子。有人可以给我一个更好的代表吗?这些“盒子”有索引号吗?当 EOF 与 256 个可用值中的一个值重叠时,我们能否预测它将与哪个值重叠?
另外,这是否意味着数据类型“char”只有在我们简单地手动为变量赋值时才可以使用,例如 char c = 'a',当我们明确知道我们将只有 256 个可能的 ASCII人物?
另外,“char”和“int”之间的实际重要区别是什么?如果我们可以使用“int”类型而不是“char”类型,为什么我们决定在某些时候使用一种而不是另一种呢?是为了节省“内存”(我使用引号,因为我实际上并不知道“内存”是如何工作的)。
最后,这 256 个 char 类型的可用值究竟是如何获得的?我读了一些关于模 2^n 的东西,其中 n = 8,但为什么它会起作用(与二进制有关?)。“模2 ^ n”的模部分是什么意思(如果它与模算术有任何关系,我看不到关系......)?