首页 > 解决方案 > 我正在阅读“The C Programming Language”(第 2 版),但我不理解一个概念:

问题描述

我正在阅读“C 编程语言”(2ed),但我不理解一个概念。

有此代码可将输入复制到输出

#include <stdio.h>

main()
{
    int c;
    c = getchar();
    while (c != EOF) {
        putchar(c);
        c = getchar();
    }
}

一开始,c它被声明为一个int类型变量,但如果我写了“测试线”之类的东西,那么输出就是预期的“测试线”。我的问题是:如何c声明为int类型变量,但程序存储空间足以存储大量字符?“内部”计算机,它注册为一个字符数组?这个过程是如何工作的?

标签: arrayscinteger

解决方案


但是如果我写类似“测试线”的东西,输出就是预期的“测试线”。

“c”如何声明为int类型变量,但程序存储的空间足以容纳很多字符?

所有输入不会同时存储在变量c中,而是存储在输入和输出缓冲区中。变量c一次处理一个字符。

让我们看看事件的顺序。

  1. main()开始并运行到getchar().

  2. getchar()等待输入。

  3. 用户类型t,操作系统缓冲字符。

  4. 用户类型e s......,e操作系统缓冲这些字符。

  5. 用户类型Enter,操作系统缓冲字符'\n'并提供缓冲区以stdingetchar()开始使用。

  6. getchar()返回t并保存在c.

  7. 代码继续putchar(c);并将其t放入stdout缓冲区。

  8. 代码继续getchar();,返回缓冲e并保存在c.

  9. 代码继续putchar(c);并将其e放入stdout缓冲区。

  10. 8 - 9 重复st line

  11. 代码继续getchar();,返回缓冲\n并保存在c.

  12. 代码继续putchar(c);并将其\n放入stdout缓冲区。缓冲区现在被刷新到 OS 输出终端。输出现在可见。

  13. 返回第 2 步,直到没有可用的输入。


推荐阅读