<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: qiaqiabuqia</title>
    <description>The latest articles on DEV Community by qiaqiabuqia (@qiaqiabuqia).</description>
    <link>https://dev.to/qiaqiabuqia</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4124571%2Fb8c45a6a-a3be-411c-bbf9-2722710eb712.png</url>
      <title>DEV Community: qiaqiabuqia</title>
      <link>https://dev.to/qiaqiabuqia</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/qiaqiabuqia"/>
    <language>en</language>
    <item>
      <title>C语言--初步理解C语言</title>
      <dc:creator>qiaqiabuqia</dc:creator>
      <pubDate>Tue, 29 Sep 2026 11:58:44 +0000</pubDate>
      <link>https://dev.to/qiaqiabuqia/cyu-yan-chu-bu-li-jie-cyu-yan-2fi2</link>
      <guid>https://dev.to/qiaqiabuqia/cyu-yan-chu-bu-li-jie-cyu-yan-2fi2</guid>
      <description>&lt;h1&gt;
  
  
  理解C语言：第一个程序
&lt;/h1&gt;

&lt;h2&gt;
  
  
  一、C语言定义
&lt;/h2&gt;

&lt;p&gt;通俗地讲，C语言就是一门人跟计算机交流的语言。&lt;/p&gt;

&lt;p&gt;现实里不同地区的人说不同的话，人和机器之间的“语言差异”则更大：人说的是自然语言，例如汉语、英语、日语，计算机则使用二进制语言。为了实现人和计算机的“交流”，就有了像 C 语言这样的计算机语言。C++、Java、Go、Python 其实也都是。&lt;/p&gt;

&lt;p&gt;C 语言最早是作为 Unix 系统的开发工具被发明出来的，设计者是贝尔实验室的 Dennis Ritchie（丹尼斯·里奇）。后来他和 Brian Kernighan（布莱恩·柯林汉）合写了一本《The C Programming Language》。&lt;/p&gt;

&lt;p&gt;到今天，Linux 内核、Redis、MySQL 这些偏底层的项目，都还是用 C 写的。这也是 C 经久不衰的原因。下图是 TIOBE 编程社区 9 月公布的相关数据：&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhua0ni5975dcnfe7we0k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhua0ni5975dcnfe7we0k.png" alt=" " width="800" height="334"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  二、程序编写准备
&lt;/h2&gt;

&lt;p&gt;就像大学生期末考试写高数前得先买一支笔，写 C 程序也得先有工具：编译器和链接器，它们是用来对代码进行编译和链接的工具。&lt;/p&gt;

&lt;h3&gt;
  
  
  1. 编译和链接
&lt;/h3&gt;

&lt;p&gt;C 是编译型语言，代码都写在以 &lt;code&gt;.c&lt;/code&gt; 结尾的文本文件里。文本文件本身不能执行我们想要的操作，要经过两道处理：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;编译&lt;/strong&gt;：编译器（VS 里是 &lt;code&gt;cl.exe&lt;/code&gt;）把每个 &lt;code&gt;.c&lt;/code&gt; 文件编译成对应的 &lt;code&gt;.obj&lt;/code&gt; 目标文件；&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;链接&lt;/strong&gt;：链接器（&lt;code&gt;link.exe&lt;/code&gt;）把多个目标文件和库文件拼到一起，生成 &lt;code&gt;.exe&lt;/code&gt; 可执行文件。&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;这两步对初学者较难理解，可以先做简单了解，后面会展开讲解。&lt;/p&gt;

&lt;h3&gt;
  
  
  2. 编译器与 IDE
&lt;/h3&gt;

&lt;p&gt;编译器有好几种，常见的有 GCC、Clang、MSVC，但直接拿来用都得自己配置环境，学习成本偏高。&lt;/p&gt;

&lt;p&gt;所以一般用集成开发环境（IDE）——它把编辑器、编译器、调试器都打包好了，开箱即用。常见的有 VS2022 / VS2026、Xcode、Code::Blocks、Dev-C++、CLion。&lt;/p&gt;

&lt;p&gt;这一系列文章使用的是 &lt;strong&gt;VS2026&lt;/strong&gt;，功能全、界面是中文的（自己选择），装完基本不用额外配置，对新手比较友好。&lt;/p&gt;

&lt;p&gt;相应的 IDE 下载步骤可以在 B 站上查找教程，比较简单。一般地，下载好安装程序、执行，根据引导进行相关设定即可；也可以考虑询问 AI，要求指导。&lt;/p&gt;

&lt;h2&gt;
  
  
  三、第一个好运程序
&lt;/h2&gt;

&lt;p&gt;建好项目和源文件（该过程同样可以询问 AI），就可以写第一段代码了，这是来自 C 语言之父的“传统”：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;
&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"hello, world&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;据说，这段代码会给每一个程序员带来好运。初学看不懂很正常，照着敲就好。实际上，当你安装完程序，除了所谓的传统外，敲这样一段代码也是为了检验你的集成环境是否正常。&lt;/p&gt;

&lt;p&gt;写的时候记得把输入法切到英文——C 语言里必须用英文半角符号，也就是 Win11 右下角应该如图所示：&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2g46tw88kb9rjnhxs4r6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2g46tw88kb9rjnhxs4r6.png" alt=" " width="269" height="59"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  四、代码解析（可跳过）
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;[!note] 提示&lt;br&gt;
以下四点看不懂很正常，因为初学者缺乏了很多前置知识。如果你的代码运行正常，这一段建议跳过，等学完基础知识后再回过头来阅读即可。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  1. &lt;code&gt;#include &amp;lt;stdio.h&amp;gt;&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;这是一句指令，作用是把 stdio 这个头文件包含进来。&lt;/p&gt;

&lt;p&gt;可以这么理解：想用一把剪刀，前提是装有剪刀的工具箱在你手上。这句话就是把 stdio 这个“工具箱”放到你手上，里面装着 printf 这个工具。&lt;/p&gt;

&lt;p&gt;stdio 是 standard input / output 的缩写，也就是“标准输入输出”，只要跟输入输出有关的操作，都要包含它。printf 是 print 和 format 的结合，表示格式化输出。&lt;/p&gt;

&lt;h3&gt;
  
  
  2. &lt;code&gt;int main()&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;main 是程序的入口，每个 C 程序都从 main 开始执行，所以它也叫主函数。一个项目里可以有多个 &lt;code&gt;.c&lt;/code&gt; 文件，但 main 有且只有一个。&lt;/p&gt;

&lt;p&gt;前面的 int 是 integer 的缩写，意思是整型，也就是说 main 结束时会返回一个整数；后面那对大括号 &lt;code&gt;{}&lt;/code&gt; 里，才是它真正要执行的代码。&lt;/p&gt;

&lt;h3&gt;
  
  
  3. &lt;code&gt;printf("hello, world\n");&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;这是一次函数调用，把引号里的内容交给 printf 打印出来。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;引号里的东西叫&lt;strong&gt;字符串&lt;/strong&gt;，注意是双引号，单引号括起来的单个字符才叫字符；&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;\n&lt;/code&gt; 是&lt;strong&gt;换行&lt;/strong&gt;，不写的话光标不会跳到下一行；&lt;/li&gt;
&lt;li&gt;末尾的&lt;strong&gt;分号&lt;/strong&gt;不能少，C 语言里每条语句都得用它收尾。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. &lt;code&gt;return 0;&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;表示程序正常结束，把 0 交还给操作系统，正好和 main 前面的 int 呼应上。&lt;/p&gt;

&lt;h2&gt;
  
  
  五、再谈主函数
&lt;/h2&gt;

&lt;p&gt;C 语言最重要的是 &lt;code&gt;main()&lt;/code&gt; 这六个字符，一般地，我们把这个整体称为主函数，也就是 C 程序中最主要的函数。&lt;/p&gt;

&lt;p&gt;&lt;code&gt;main()&lt;/code&gt; 是程序执行的入口，这句话需要这样理解：main 只能有一个，无论有多少个 C 文件。因为 C 程序执行的时候需要从一端开始，而不是多处、多端开始，这是这门程序语言设定好的规则，需要每一个程序员遵守，具体的原因需要不断深入后才能理解。&lt;/p&gt;

&lt;p&gt;花括号包括了主函数的内容，&lt;code&gt;return 0&lt;/code&gt; 是主函数结束的标志，这些东西都是设定好的，它们的根源需要我们不断学习才能掌握，当前阶段记住就好。&lt;/p&gt;

&lt;p&gt;所以回过头来看最开始的程序，我们是在主函数中使用了一个工具，进而实现了我们的目的。这个工具也很有意思，叫做 printf，也就是格式化输出的含义：print 是输出，f 是 format 的缩写，表示格式化。它是我们常用的一个输出工具，用来在控制台打印我们需要的信息（也就是那个黑色的窗口）。&lt;/p&gt;

&lt;h2&gt;
  
  
  六、常见错误
&lt;/h2&gt;

&lt;p&gt;以下是初学者可能犯的错误，会导致代码出错、程序无法正常运行：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;main 写成了 mian；&lt;/li&gt;
&lt;li&gt;main 后面的 &lt;code&gt;()&lt;/code&gt; 漏掉了；&lt;/li&gt;
&lt;li&gt;用了中文符号，比如括号、分号；&lt;/li&gt;
&lt;li&gt;一条语句结束忘了写分号。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;刚开始犯错很正常，练熟了就好了。&lt;/p&gt;

&lt;h2&gt;
  
  
  七、从主函数到函数
&lt;/h2&gt;

&lt;p&gt;既然有了主函数，我们不难猜想还有别的函数，毕竟主函数之所以叫主函数，就是为了区别于其他函数。&lt;/p&gt;

&lt;p&gt;实际上我们一直称为“工具”的 printf 就是一个函数。至此，我们得到 C 语言里面的一个概念——&lt;strong&gt;函数&lt;/strong&gt;。它是用来处理一些复杂操作的：比如我们要把“你好”打印到电脑的控制台，实际上背后如何做到的我们一无所知，我们只要使用 printf 这个操作就可以实现，细节就是把我们要输出的信息放到里面。&lt;/p&gt;

&lt;p&gt;这也就涉及到如何实现函数的调用了，是一个复杂的部分，每个函数都有所不同。而且为了了解这一部分，我们需要了解 C 语言的数据类型。&lt;/p&gt;

&lt;h2&gt;
  
  
  八、关键字（保留字）
&lt;/h2&gt;

&lt;p&gt;人类为了描述自然世界，在数学中加入了各种类型，包括描述重量的千克和描述长度的米，以及一些纯粹的数字。而 C 语言同样具备类似的“单位”，而且相对于自然语言，C 语言的“单位”更加抽象，我们一般称为&lt;strong&gt;数据类型&lt;/strong&gt;。&lt;/p&gt;

&lt;p&gt;在了解数据类型前，需要先了解一个概念，只有理解它们，才能辨别 C 语言中的数据类型以及其他关键代码。这个概念就是&lt;strong&gt;关键字&lt;/strong&gt;，或者称为&lt;strong&gt;保留字&lt;/strong&gt;。&lt;/p&gt;

&lt;p&gt;还是用最简单的那个 hello world 程序，我们已经了解到什么是主函数 &lt;code&gt;main()&lt;/code&gt; 了，但是主函数使用前有一串字符，叫做 &lt;code&gt;int&lt;/code&gt;，它就是一个关键字，用来表示整型的概念，此处不妨将整型理解为数学中的整数。&lt;/p&gt;

&lt;p&gt;类似的关键字还有很多，例如：&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;类别&lt;/th&gt;
&lt;th&gt;关键字&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;数据类型&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;int&lt;/code&gt;、&lt;code&gt;char&lt;/code&gt;、&lt;code&gt;float&lt;/code&gt;、&lt;code&gt;double&lt;/code&gt;、&lt;code&gt;void&lt;/code&gt;、&lt;code&gt;long&lt;/code&gt;、&lt;code&gt;short&lt;/code&gt;、&lt;code&gt;signed&lt;/code&gt;、&lt;code&gt;unsigned&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;流程控制&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;if&lt;/code&gt;、&lt;code&gt;else&lt;/code&gt;、&lt;code&gt;switch&lt;/code&gt;、&lt;code&gt;case&lt;/code&gt;、&lt;code&gt;default&lt;/code&gt;、&lt;code&gt;for&lt;/code&gt;、&lt;code&gt;while&lt;/code&gt;、&lt;code&gt;do&lt;/code&gt;、&lt;code&gt;break&lt;/code&gt;、&lt;code&gt;continue&lt;/code&gt;、&lt;code&gt;goto&lt;/code&gt;、&lt;code&gt;return&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;存储与限定&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;static&lt;/code&gt;、&lt;code&gt;extern&lt;/code&gt;、&lt;code&gt;register&lt;/code&gt;、&lt;code&gt;const&lt;/code&gt;、&lt;code&gt;volatile&lt;/code&gt;、&lt;code&gt;auto&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;构造与运算&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;struct&lt;/code&gt;、&lt;code&gt;union&lt;/code&gt;、&lt;code&gt;enum&lt;/code&gt;、&lt;code&gt;typedef&lt;/code&gt;、&lt;code&gt;sizeof&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;它们是 C 语言保留的字符串，也就是说，程序员不可以在程序中将其另作他用，只能用于固定的用途。以上关键字都会在后续讲解到，此处作了解即可。&lt;/p&gt;

&lt;h2&gt;
  
  
  九、数据类型与变量
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. 三种基本数据类型
&lt;/h3&gt;

&lt;p&gt;前面提到，只有了解数据类型，才能理解函数的调用。先看最常用的三种基本数据类型：&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;数据类型&lt;/th&gt;
&lt;th&gt;关键字&lt;/th&gt;
&lt;th&gt;含义&lt;/th&gt;
&lt;th&gt;举例&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;整型&lt;/td&gt;
&lt;td&gt;&lt;code&gt;int&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;数学上的整数&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;10&lt;/code&gt;、&lt;code&gt;-3&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;浮点型&lt;/td&gt;
&lt;td&gt;&lt;code&gt;float&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;数学上的小数&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;3.14&lt;/code&gt;、&lt;code&gt;-0.5&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;字符型&lt;/td&gt;
&lt;td&gt;&lt;code&gt;char&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;英文字母、中文等字符&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;'A'&lt;/code&gt;、&lt;code&gt;'中'&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;我们常用 &lt;code&gt;int&lt;/code&gt; 来表示数学上的整数，用浮点型表示小数，用字符型表示字母、中文等字符。&lt;/p&gt;

&lt;p&gt;这里要特别记住一点：&lt;strong&gt;字符常量用单引号 &lt;code&gt;''&lt;/code&gt; 标识，字符串才用双引号 &lt;code&gt;""&lt;/code&gt;&lt;/strong&gt;，这样就能把字符和字符串区分开来。&lt;/p&gt;

&lt;h3&gt;
  
  
  2. 变量与赋值
&lt;/h3&gt;

&lt;p&gt;变量就是用来存放数据的容器。前面说的“定义”这个操作，实际上就是使用关键字（&lt;code&gt;int&lt;/code&gt;、&lt;code&gt;float&lt;/code&gt;、&lt;code&gt;char&lt;/code&gt;）结合变量名、赋值符号，把数据存进去。&lt;/p&gt;

&lt;p&gt;看这样一句代码：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;它的意思是：把整数 10 存放到整型变量 a 中。以等号为界——&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;等号左边是 &lt;code&gt;int a&lt;/code&gt;，表示定义了一个变量，名字是 a，数据类型是 int；&lt;/li&gt;
&lt;li&gt;等号右边是数字 10，显然是一个整数；&lt;/li&gt;
&lt;li&gt;结合等号的含义，就是说整型变量 a 的值是 10。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;这里提到的“存放数据”“赋值”“变量的值是……”，其实都是一个意思，不必过于深究。最规范的说法是&lt;strong&gt;将 10 赋值给变量 a&lt;/strong&gt;；为了接收整数 10，我们把 a 的类型规定为整型，其他说法都只是便于接受。&lt;/p&gt;

&lt;p&gt;也可以拆成两句来写：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;这两句和上面的 &lt;code&gt;int a = 10;&lt;/code&gt; 在 C 语言中是等价的，一般我们使用第一种。&lt;/p&gt;

&lt;h3&gt;
  
  
  3. 字符型与浮点型的定义
&lt;/h3&gt;

&lt;p&gt;仿照整型，也可以定义字符型和浮点型变量：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sc"&gt;'A'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;        &lt;span class="c1"&gt;// 定义字符型变量 c，存放字符 'A'&lt;/span&gt;
&lt;span class="kt"&gt;float&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;     &lt;span class="c1"&gt;// 定义浮点型变量 f，存放小数 3.14&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;[!tip] 关于 &lt;code&gt;3.14f&lt;/code&gt; 后面的 f&lt;br&gt;
直接写 &lt;code&gt;3.14&lt;/code&gt; 会被当作双精度浮点型（&lt;code&gt;double&lt;/code&gt;），后面的 &lt;code&gt;f&lt;/code&gt; 用来把它明确成单精度浮点型（&lt;code&gt;float&lt;/code&gt;）。入门阶段先照着写即可。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  4. 三种类型的关键字记忆
&lt;/h3&gt;

&lt;p&gt;三种基本类型的&lt;strong&gt;关键字&lt;/strong&gt;比较难记，可以结合英文单词来记：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;整数的英文单词是 integer，C 语言把它缩写为关键字 &lt;code&gt;int&lt;/code&gt;；&lt;/li&gt;
&lt;li&gt;字符的英文单词是 character，关键字是 &lt;code&gt;char&lt;/code&gt;；&lt;/li&gt;
&lt;li&gt;浮点型较为特殊，主要关注它“浮动”的特性，float 本身也有“漂浮”的意思。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;为什么把小数称为浮点型？&lt;/strong&gt;&lt;br&gt;
因为这类数的小数点位置不是固定的，而是可以“浮动”的。计算机正是依靠这种“小数点位置可变”的方式来表示小数，所以称为浮点型：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="kt"&gt;float&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;     &lt;span class="c1"&gt;// 相当于 3.14 × 10^0&lt;/span&gt;
&lt;span class="kt"&gt;double&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;314&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;    &lt;span class="c1"&gt;// 也可以理解为 3.14 × 10^2&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  5. 深入整型
&lt;/h3&gt;

&lt;p&gt;整型分为四种，分别是&lt;strong&gt;短整型&lt;/strong&gt;、&lt;strong&gt;整型&lt;/strong&gt;、&lt;strong&gt;长整型&lt;/strong&gt;、&lt;strong&gt;更长的整型&lt;/strong&gt;。它们都用来表示整数，区别在于能存放的数据大小不同，对应的关键字分别是：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;短整型：&lt;code&gt;short int&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;整型：&lt;code&gt;int&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;长整型：&lt;code&gt;long int&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;更长的整型：&lt;code&gt;long long int&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;再结合 &lt;code&gt;signed&lt;/code&gt;（有符号）和 &lt;code&gt;unsigned&lt;/code&gt;（无符号）两个关键字，我们就得到了 8 种整型。下表列出它们的典型大小和取值范围（&lt;strong&gt;以常见的 64 位平台为例，实际大小与平台相关&lt;/strong&gt;）：&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;类型&lt;/th&gt;
&lt;th&gt;关键字&lt;/th&gt;
&lt;th&gt;典型大小&lt;/th&gt;
&lt;th&gt;取值范围&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;短整型&lt;/td&gt;
&lt;td&gt;&lt;code&gt;short int&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;2 字节&lt;/td&gt;
&lt;td&gt;-32768 ~ 32767&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;无符号短整型&lt;/td&gt;
&lt;td&gt;&lt;code&gt;unsigned short int&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;2 字节&lt;/td&gt;
&lt;td&gt;0 ~ 65535&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;整型&lt;/td&gt;
&lt;td&gt;&lt;code&gt;int&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;4 字节&lt;/td&gt;
&lt;td&gt;-2147483648 ~ 2147483647&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;无符号整型&lt;/td&gt;
&lt;td&gt;&lt;code&gt;unsigned int&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;4 字节&lt;/td&gt;
&lt;td&gt;0 ~ 4294967295&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;长整型&lt;/td&gt;
&lt;td&gt;&lt;code&gt;long int&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;4 或 8 字节&lt;/td&gt;
&lt;td&gt;-2147483648 ~ 2147483647（Windows 下为 4 字节）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;无符号长整型&lt;/td&gt;
&lt;td&gt;&lt;code&gt;unsigned long int&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;4 或 8 字节&lt;/td&gt;
&lt;td&gt;0 ~ 4294967295（Windows 下）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;更长整型&lt;/td&gt;
&lt;td&gt;&lt;code&gt;long long int&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;8 字节&lt;/td&gt;
&lt;td&gt;-9223372036854775808 ~ 9223372036854775807&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;无符号更长整型&lt;/td&gt;
&lt;td&gt;&lt;code&gt;unsigned long long int&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;8 字节&lt;/td&gt;
&lt;td&gt;0 ~ 18446744073709551615&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;之所以这样设定，是为了在写 C 程序时，能对电脑内存达到最高效的利用。打个比方：&lt;strong&gt;你的饭量决定你点的菜量&lt;/strong&gt;——数据有多大，就选刚好够用的类型。&lt;/p&gt;

&lt;p&gt;8 种整型的定义示例：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="kt"&gt;short&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;                 &lt;span class="c1"&gt;// 短整型&lt;/span&gt;
&lt;span class="kt"&gt;unsigned&lt;/span&gt; &lt;span class="kt"&gt;short&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;        &lt;span class="c1"&gt;// 无符号短整型&lt;/span&gt;
&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;                       &lt;span class="c1"&gt;// 整型&lt;/span&gt;
&lt;span class="kt"&gt;unsigned&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;              &lt;span class="c1"&gt;// 无符号整型&lt;/span&gt;
&lt;span class="kt"&gt;long&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;                  &lt;span class="c1"&gt;// 长整型&lt;/span&gt;
&lt;span class="kt"&gt;unsigned&lt;/span&gt; &lt;span class="kt"&gt;long&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;         &lt;span class="c1"&gt;// 无符号长整型&lt;/span&gt;
&lt;span class="kt"&gt;long&lt;/span&gt; &lt;span class="kt"&gt;long&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;g&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;70&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;             &lt;span class="c1"&gt;// 更长整型&lt;/span&gt;
&lt;span class="kt"&gt;unsigned&lt;/span&gt; &lt;span class="kt"&gt;long&lt;/span&gt; &lt;span class="kt"&gt;long&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;h&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;    &lt;span class="c1"&gt;// 无符号更长整型&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  6. 深入字符型
&lt;/h3&gt;

&lt;p&gt;字符型只有一种：&lt;code&gt;char&lt;/code&gt;。如果考虑符号，就分两种——&lt;code&gt;signed char&lt;/code&gt;（有符号）和 &lt;code&gt;unsigned char&lt;/code&gt;（无符号）。&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;类型&lt;/th&gt;
&lt;th&gt;关键字&lt;/th&gt;
&lt;th&gt;典型大小&lt;/th&gt;
&lt;th&gt;取值范围&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;字符型（有符号）&lt;/td&gt;
&lt;td&gt;&lt;code&gt;signed char&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;1 字节&lt;/td&gt;
&lt;td&gt;-128 ~ 127&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;字符型（无符号）&lt;/td&gt;
&lt;td&gt;&lt;code&gt;unsigned char&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;1 字节&lt;/td&gt;
&lt;td&gt;0 ~ 255&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;[!note] 提示&lt;br&gt;
直接写 &lt;code&gt;char&lt;/code&gt; 时，它到底是有符号还是无符号，C 标准没有强制规定，由具体的编译器决定。入门阶段先掌握“一个 char 占 1 字节”即可。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;定义示例：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sc"&gt;'A'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;            &lt;span class="c1"&gt;// 普通字符型&lt;/span&gt;
&lt;span class="kt"&gt;signed&lt;/span&gt; &lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="n"&gt;sc&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;     &lt;span class="c1"&gt;// 有符号字符型&lt;/span&gt;
&lt;span class="kt"&gt;unsigned&lt;/span&gt; &lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="n"&gt;uc&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  &lt;span class="c1"&gt;// 无符号字符型&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  7. 深入浮点型
&lt;/h3&gt;

&lt;p&gt;浮点型分为三种：&lt;code&gt;float&lt;/code&gt;、&lt;code&gt;double&lt;/code&gt;、&lt;code&gt;long double&lt;/code&gt;。&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;类型&lt;/th&gt;
&lt;th&gt;关键字&lt;/th&gt;
&lt;th&gt;典型大小&lt;/th&gt;
&lt;th&gt;说明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;单精度浮点型&lt;/td&gt;
&lt;td&gt;&lt;code&gt;float&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;4 字节&lt;/td&gt;
&lt;td&gt;精度约 6~7 位有效数字&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;双精度浮点型&lt;/td&gt;
&lt;td&gt;&lt;code&gt;double&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;8 字节&lt;/td&gt;
&lt;td&gt;精度约 15~16 位有效数字&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;长双精度浮点型&lt;/td&gt;
&lt;td&gt;&lt;code&gt;long double&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;8 或 16 字节&lt;/td&gt;
&lt;td&gt;精度更高，大小与平台相关&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;定义示例：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="kt"&gt;float&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;                            &lt;span class="c1"&gt;// 单精度&lt;/span&gt;
&lt;span class="kt"&gt;double&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;1415926535&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;                    &lt;span class="c1"&gt;// 双精度&lt;/span&gt;
&lt;span class="kt"&gt;long&lt;/span&gt; &lt;span class="kt"&gt;double&lt;/span&gt; &lt;span class="n"&gt;ld&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;14159265358979323846L&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;   &lt;span class="c1"&gt;// 长双精度&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  8. 数据的存储单位
&lt;/h3&gt;

&lt;p&gt;上面给范围时，我们故意没有给出具体单位，而是用“大小”笼统带过。接下来讲清楚数据存储的单位——这些单位知识不只对 C 语言有用，对以后学习 Python 等语言同样有帮助。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;bit（位 / 比特）&lt;/strong&gt;：最小的数据单位，只能取 0 或 1，是二进制的根本。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;byte（字节）&lt;/strong&gt;：计算机存储的基本单位，1 字节 = 8 位，即 &lt;strong&gt;1 Byte = 8 bit&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;常用换算关系：&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;单位&lt;/th&gt;
&lt;th&gt;换算&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1 Byte&lt;/td&gt;
&lt;td&gt;8 bit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1 KB&lt;/td&gt;
&lt;td&gt;1024 Byte&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1 MB&lt;/td&gt;
&lt;td&gt;1024 KB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1 GB&lt;/td&gt;
&lt;td&gt;1024 MB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1 TB&lt;/td&gt;
&lt;td&gt;1024 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;计算机内部采用二进制存储数据。以 1 个字节（8 位）为例：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;若按无符号理解，8 位能表示 $2^8 = 256$ 个数，即 0 ~ 255；&lt;/li&gt;
&lt;li&gt;若按有符号理解，则划分到 -128 ~ 127。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;这也正好解释了前面 &lt;code&gt;unsigned char&lt;/code&gt; 的范围是 0 ~ 255、&lt;code&gt;signed char&lt;/code&gt; 的范围是 -128 ~ 127 的原因。&lt;/p&gt;

&lt;h3&gt;
  
  
  9. 整型的极限值常量
&lt;/h3&gt;

&lt;p&gt;为了代码的可移植性，当我们需要用到某种整数类型的极限值时，一般不会直接写死数字，而是使用标准头文件 &lt;code&gt;&amp;lt;limits.h&amp;gt;&lt;/code&gt; 中预先定义好的常量，比如 &lt;code&gt;INT_MIN&lt;/code&gt;、&lt;code&gt;INT_MAX&lt;/code&gt;。常用的有：&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;常量&lt;/th&gt;
&lt;th&gt;含义&lt;/th&gt;
&lt;th&gt;典型值（64 位 / VS2026）&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;INT_MIN&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;int&lt;/code&gt; 的最小值&lt;/td&gt;
&lt;td&gt;-2147483648&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;INT_MAX&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;int&lt;/code&gt; 的最大值&lt;/td&gt;
&lt;td&gt;2147483647&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;UINT_MAX&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;unsigned int&lt;/code&gt; 的最大值&lt;/td&gt;
&lt;td&gt;4294967295&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;LONG_MIN&lt;/code&gt; / &lt;code&gt;LONG_MAX&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;long&lt;/code&gt; 的最小 / 最大值&lt;/td&gt;
&lt;td&gt;-2147483648 / 2147483647&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ULLONG_MAX&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;unsigned long long&lt;/code&gt; 的最大值&lt;/td&gt;
&lt;td&gt;18446744073709551615&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;这些常量本质上都是宏，取值正好对应前面表格里的取值范围。使用前要先包含头文件：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;limits.h&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;
&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"%d&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;INT_MAX&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;   &lt;span class="c1"&gt;// 2147483647&lt;/span&gt;
    &lt;span class="n"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"%d&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;INT_MIN&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;   &lt;span class="c1"&gt;// -2147483648&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;这样写的好处是：即使换到 &lt;code&gt;int&lt;/code&gt; 宽度不同的平台，常量也会自动跟着变化，代码不必改动，也就更不容易出错。&lt;/p&gt;

&lt;h2&gt;
  
  
  十、布尔类型
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. 布尔类型的由来
&lt;/h3&gt;

&lt;p&gt;布尔类型用来表示“真”与“假”两种结果，名字来自英国数学家 George Boole（乔治·布尔）。&lt;/p&gt;

&lt;p&gt;在早期的 C 语言（C89）里，其实并没有布尔类型，人们通常用整型 &lt;code&gt;int&lt;/code&gt; 来代替：&lt;strong&gt;0 表示假，非 0 表示真&lt;/strong&gt;。&lt;/p&gt;

&lt;p&gt;直到 C99 标准，才正式引入了布尔类型。不过它的关键字并不是 &lt;code&gt;bool&lt;/code&gt;，而是 &lt;code&gt;_Bool&lt;/code&gt;（前面有一个下划线，且 B 大写）。为了书写方便，标准头文件 &lt;code&gt;&amp;lt;stdbool.h&amp;gt;&lt;/code&gt; 又把它包装成了 &lt;code&gt;bool&lt;/code&gt;，并定义了 &lt;code&gt;true&lt;/code&gt;（真）和 &lt;code&gt;false&lt;/code&gt;（假）两个宏。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;为什么 C99 不直接使用 &lt;code&gt;bool&lt;/code&gt;？&lt;/strong&gt; 核心原因是为了兼容大量已有的 C 代码，避免“破坏性”的改动。&lt;/p&gt;

&lt;p&gt;在 C99 之前，&lt;code&gt;bool&lt;/code&gt; 并不是关键字，而是程序员可以自由使用的普通标识符。很多人会自己写一句 &lt;code&gt;typedef int bool;&lt;/code&gt;，或者干脆拿 &lt;code&gt;bool&lt;/code&gt; 当变量名、函数名、结构体名。假如 C99 直接规定 &lt;code&gt;bool&lt;/code&gt; 是关键字，这些老代码里的 &lt;code&gt;bool&lt;/code&gt; 就会全部变成语法错误，无法再编译——对一门非常强调向后兼容的语言来说，这是不可接受的。&lt;/p&gt;

&lt;p&gt;于是标准挑了一个“几乎不可能撞名”的名字：&lt;code&gt;_Bool&lt;/code&gt;。因为 C 标准规定，凡是以“下划线 + 大写字母”开头（或以双下划线开头）的标识符，都是&lt;strong&gt;保留给编译器实现使用的&lt;/strong&gt;，普通程序不会也不应该使用它们。拿这样一个名字来当关键字，就能最大程度避免与现存代码冲突。&lt;/p&gt;

&lt;p&gt;真正的关键字只有 &lt;code&gt;_Bool&lt;/code&gt; 这一个，&lt;code&gt;bool&lt;/code&gt;、&lt;code&gt;true&lt;/code&gt;、&lt;code&gt;false&lt;/code&gt; 都只是 &lt;code&gt;&amp;lt;stdbool.h&amp;gt;&lt;/code&gt; 里用宏“顺手”提供的别名：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="c1"&gt;// &amp;lt;stdbool.h&amp;gt; 大致相当于：&lt;/span&gt;
&lt;span class="cp"&gt;#define bool  _Bool
#define true  1
#define false 0
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;所以，只要包含了 &lt;code&gt;&amp;lt;stdbool.h&amp;gt;&lt;/code&gt;，就可以像 C++ 那样直接写 &lt;code&gt;bool&lt;/code&gt;；而没有包含它的老代码则完全不受影响——&lt;code&gt;bool&lt;/code&gt; 依旧可以当普通名字用。正是这种“新关键字加下划线、再靠头文件用宏包装”的做法，让 C 语言能在不破坏老代码的前提下不断演进。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;[!note] 补充&lt;br&gt;
从 C23 标准开始，&lt;code&gt;bool&lt;/code&gt;、&lt;code&gt;true&lt;/code&gt;、&lt;code&gt;false&lt;/code&gt; 已经成为语言自带的关键字，不再需要包含 &lt;code&gt;&amp;lt;stdbool.h&amp;gt;&lt;/code&gt;；但在使用旧标准的代码里，仍然要显式包含它。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  2. 布尔类型的大小与取值
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;类型&lt;/th&gt;
&lt;th&gt;关键字&lt;/th&gt;
&lt;th&gt;典型大小&lt;/th&gt;
&lt;th&gt;取值&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;布尔类型&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;_Bool&lt;/code&gt; / &lt;code&gt;bool&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;1 字节&lt;/td&gt;
&lt;td&gt;0（假）、1（真）&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;布尔类型通常只占 1 字节。需要注意的是：把任意非 0 的整数赋给布尔变量时，它会被自动“规整”成 1，只有赋 0 才会得到 0。&lt;/p&gt;

&lt;h3&gt;
  
  
  3. 定义与使用示例
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;stdbool.h&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;
&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;bool&lt;/span&gt; &lt;span class="n"&gt;flag&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;      &lt;span class="c1"&gt;// 等价于 _Bool flag = 1;&lt;/span&gt;
    &lt;span class="n"&gt;bool&lt;/span&gt; &lt;span class="n"&gt;empty&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;    &lt;span class="c1"&gt;// 等价于 _Bool empty = 0;&lt;/span&gt;

    &lt;span class="n"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"%d&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;flag&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;  &lt;span class="c1"&gt;// 输出 1&lt;/span&gt;
    &lt;span class="n"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"%d&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;empty&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// 输出 0&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  十一、sizeof 关键字
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. sizeof 是什么
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;sizeof&lt;/code&gt; 用来求一个类型或一个变量“占多少字节”。这里要特别强调：&lt;strong&gt;&lt;code&gt;sizeof&lt;/code&gt; 是关键字（运算符），不是像 printf 那样的库函数。&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;它长得像函数、用起来也带小括号，所以很容易被误认，但两者有本质区别：&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;对比项&lt;/th&gt;
&lt;th&gt;&lt;code&gt;sizeof&lt;/code&gt;&lt;/th&gt;
&lt;th&gt;
&lt;code&gt;printf&lt;/code&gt;（函数）&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;身份&lt;/td&gt;
&lt;td&gt;关键字 / 运算符&lt;/td&gt;
&lt;td&gt;库函数&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;是否需要包含头文件&lt;/td&gt;
&lt;td&gt;不需要&lt;/td&gt;
&lt;td&gt;需要 &lt;code&gt;#include &amp;lt;stdio.h&amp;gt;&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;何时起作用&lt;/td&gt;
&lt;td&gt;编译阶段就求出结果&lt;/td&gt;
&lt;td&gt;运行阶段才被调用&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;能否接类型名&lt;/td&gt;
&lt;td&gt;能，如 &lt;code&gt;sizeof(int)&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;不能&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;能否取地址&lt;/td&gt;
&lt;td&gt;不能&lt;/td&gt;
&lt;td&gt;可以&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;正因为它是运算符，所以既可以写成 &lt;code&gt;sizeof(类型)&lt;/code&gt;，也可以写成 &lt;code&gt;sizeof(变量)&lt;/code&gt;；而后一种形式里的括号其实可以省略。&lt;/p&gt;

&lt;h3&gt;
  
  
  2. 两种写法
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;
&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="n"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"%zu&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;sizeof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;   &lt;span class="c1"&gt;// 4：求“类型” int 的大小&lt;/span&gt;
    &lt;span class="n"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"%zu&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;sizeof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;     &lt;span class="c1"&gt;// 4：求“变量” a 的大小&lt;/span&gt;
    &lt;span class="n"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"%zu&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;sizeof&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;      &lt;span class="c1"&gt;// 4：变量时可以省略括号&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;[!tip] 关于 &lt;code&gt;%zu&lt;/code&gt;&lt;br&gt;
&lt;code&gt;sizeof&lt;/code&gt; 求出的结果类型是 &lt;code&gt;size_t&lt;/code&gt;，这是一种无符号整型，正确的输出格式是 &lt;code&gt;%zu&lt;/code&gt;。现代 VS 都支持；如果遇到不支持的旧编译器，可以写成 &lt;code&gt;(int)sizeof(int)&lt;/code&gt; 并配合 &lt;code&gt;%d&lt;/code&gt;。&lt;/p&gt;

&lt;p&gt;[!note] 小知识&lt;br&gt;
对普通变量使用 &lt;code&gt;sizeof&lt;/code&gt; 时，括号里的表达式&lt;strong&gt;不会被真正执行&lt;/strong&gt;。例如在 &lt;code&gt;int a = 1;&lt;/code&gt; 之后写 &lt;code&gt;sizeof(a++)&lt;/code&gt;，得到的仍然是 &lt;code&gt;4&lt;/code&gt;，而 &lt;code&gt;a&lt;/code&gt; 并不会自增。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  3. 用 sizeof 验证各类型大小
&lt;/h3&gt;

&lt;p&gt;接下来对照前面的内容，用 &lt;code&gt;sizeof&lt;/code&gt; 亲自验证每种类型到底占几个字节：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;
&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"char        : %zu 字节&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;sizeof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
    &lt;span class="n"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"short       : %zu 字节&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;sizeof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;short&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
    &lt;span class="n"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"int         : %zu 字节&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;sizeof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
    &lt;span class="n"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"long        : %zu 字节&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;sizeof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;long&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
    &lt;span class="n"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"long long   : %zu 字节&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;sizeof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;long&lt;/span&gt; &lt;span class="kt"&gt;long&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
    &lt;span class="n"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"float       : %zu 字节&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;sizeof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;float&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
    &lt;span class="n"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"double      : %zu 字节&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;sizeof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;double&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
    &lt;span class="n"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"long double : %zu 字节&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;sizeof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;long&lt;/span&gt; &lt;span class="kt"&gt;double&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;在 Windows 64 位平台 + VS2026 下，&lt;strong&gt;预期输出&lt;/strong&gt;为：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;char        : 1 字节
short       : 2 字节
int         : 4 字节
long        : 4 字节
long long   : 8 字节
float       : 4 字节
double      : 8 字节
long double : 8 字节
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;结果与前两节表格里的“典型大小”完全对得上：&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;类型&lt;/th&gt;
&lt;th&gt;
&lt;code&gt;sizeof&lt;/code&gt; 结果&lt;/th&gt;
&lt;th&gt;与前面表格对照&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;char&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;1 字节&lt;/td&gt;
&lt;td&gt;一致&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;short&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;2 字节&lt;/td&gt;
&lt;td&gt;一致&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;int&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;4 字节&lt;/td&gt;
&lt;td&gt;一致&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;long&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;4 字节&lt;/td&gt;
&lt;td&gt;一致（Windows 下为 4 字节）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;long long&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;8 字节&lt;/td&gt;
&lt;td&gt;一致&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;float&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;4 字节&lt;/td&gt;
&lt;td&gt;一致&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;double&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;8 字节&lt;/td&gt;
&lt;td&gt;一致&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;long double&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;8 字节&lt;/td&gt;
&lt;td&gt;一致（MSVC 下与 double 相同；Linux 上常为 16 字节）&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;[!warning] 注意平台差异&lt;br&gt;
上表的输出是 &lt;strong&gt;Windows + MSVC&lt;/strong&gt; 下的结果。换到 Linux（GCC）时，&lt;code&gt;long&lt;/code&gt; 通常会变成 8 字节、&lt;code&gt;long double&lt;/code&gt; 通常会变成 16 字节。所以，“某类型占几个字节”并不是 C 语言规定的绝对死数，必要时用 &lt;code&gt;sizeof&lt;/code&gt; 量一量最可靠。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  十二、C 标准的发展及其影响
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. C 语言的标准版本
&lt;/h3&gt;

&lt;p&gt;C 语言有一个特点：它最初并没有官方标准，只是由 Kernighan 与 Ritchie 的书和实现“约定俗成”。为了让不同厂商写出的编译器彼此兼容，美国国家标准学会（ANSI）和国际标准化组织（ISO）先后制定了多个版本的标准。下面按时间顺序列出主要的几版：&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;标准&lt;/th&gt;
&lt;th&gt;俗称&lt;/th&gt;
&lt;th&gt;发布年份&lt;/th&gt;
&lt;th&gt;主要新增内容&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;K&amp;amp;R C&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;1978&lt;/td&gt;
&lt;td&gt;《The C Programming Language》所定义的原始版本&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;C89 / C90&lt;/td&gt;
&lt;td&gt;ANSI C&lt;/td&gt;
&lt;td&gt;1989（ISO 于 1990 采纳）&lt;/td&gt;
&lt;td&gt;第一个官方标准，统一了语法与标准库&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;C95&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;1995&lt;/td&gt;
&lt;td&gt;对 C89 的补充修订，加入宽字符、双字符组（digraph）等&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;C99&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;1999&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;long long&lt;/code&gt;、&lt;code&gt;_Bool&lt;/code&gt; / &lt;code&gt;stdbool.h&lt;/code&gt;、变长数组、&lt;code&gt;//&lt;/code&gt; 单行注释、&lt;code&gt;stdint.h&lt;/code&gt;、&lt;code&gt;inline&lt;/code&gt;、指定初始化器等&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;C11&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;2011&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;_Generic&lt;/code&gt;、&lt;code&gt;_Static_assert&lt;/code&gt;、多线程与原子操作、匿名结构体/联合体等&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;C17 / C18&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;2018&lt;/td&gt;
&lt;td&gt;主要是缺陷修补，几乎没有新特性&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;C23&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;2024&lt;/td&gt;
&lt;td&gt;属性 &lt;code&gt;[[…]]&lt;/code&gt;、&lt;code&gt;nullptr&lt;/code&gt;、&lt;code&gt;constexpr&lt;/code&gt;、&lt;code&gt;typeof&lt;/code&gt;、二进制字面量 &lt;code&gt;0b&lt;/code&gt;、&lt;code&gt;bool&lt;/code&gt; / &lt;code&gt;true&lt;/code&gt; / &lt;code&gt;false&lt;/code&gt; 成为关键字等&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;[!note] 关于版本号&lt;br&gt;
标准年份有两种叫法：ANSI 常用发布年份（如 C89），ISO 常用正式采纳年份（如 C90），它们指的是同一版本，不必纠结。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  2. 对 C 编程的影响
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;（1）可移植性更强。&lt;/strong&gt; 只要代码遵守标准，同一份源码就更容易在 Windows、Linux、macOS 等不同平台间迁移——编译器负责把标准语法翻译成对应平台能执行的机器码。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;（2）新标准是“增量”，不是“推翻”。&lt;/strong&gt; 语言的核心部分——变量、数据类型、函数、指针、流程控制——在所有标准里都保持一致。新版本大多是“加菜”，很少删掉旧语法，所以老代码通常还能继续编译。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;（3）实际能不能用，取决于编译器。&lt;/strong&gt; 标准是“纸面规定”，真正把它落地的是各家编译器（GCC、Clang、MSVC）。同一个新特性，有的编译器支持得快，有的支持得慢，写代码时要留意当前用的是哪个标准版本。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;（4）初学者会遇到的现实差异。&lt;/strong&gt; 很多看起来“理所当然”的写法，其实是较新标准才有的：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;用 &lt;code&gt;//&lt;/code&gt; 写单行注释，是 C99 才正式加入的（C89 只能用 &lt;code&gt;/* */&lt;/code&gt;）；&lt;/li&gt;
&lt;li&gt;布尔类型 &lt;code&gt;bool&lt;/code&gt;，是 C99 才有的；&lt;/li&gt;
&lt;li&gt;在 &lt;code&gt;for&lt;/code&gt; 循环的括号里直接声明变量（&lt;code&gt;for (int i = 0; ...)&lt;/code&gt;），也是 C99 才允许的。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;所以，在 VS 中可以通过项目属性设置语言标准（对应编译选项 &lt;code&gt;/std:c11&lt;/code&gt;、&lt;code&gt;/std:c17&lt;/code&gt; 等）；阅读别人的代码时，也可以从它用到的语法反推它依赖的是哪一版标准。&lt;/p&gt;

&lt;h2&gt;
  
  
  十三、对 short、long、signed、unsigned 的补充
&lt;/h2&gt;

&lt;p&gt;前文为了让行文连贯，直接带出了 &lt;code&gt;short&lt;/code&gt;、&lt;code&gt;long&lt;/code&gt;、&lt;code&gt;unsigned&lt;/code&gt;、&lt;code&gt;signed&lt;/code&gt; 这几个关键字。严格来说，它们并不是独立的“数据类型”，而是&lt;strong&gt;类型修饰符&lt;/strong&gt;——附加在基本类型前面，用来改变它的存储长度或取值范围。它们的具体作用前文已经讲过，这里只作几点补充。&lt;/p&gt;

&lt;h3&gt;
  
  
  1. 谁能被修饰
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;short&lt;/code&gt; 和 &lt;code&gt;long&lt;/code&gt; 用来调整整型的“长度”，因此主要用于整型：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;short&lt;/code&gt; 只能修饰 &lt;code&gt;int&lt;/code&gt;：&lt;code&gt;short int&lt;/code&gt;，通常简写为 &lt;code&gt;short&lt;/code&gt;；&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;long&lt;/code&gt; 可以修饰 &lt;code&gt;int&lt;/code&gt;，也可以修饰 &lt;code&gt;double&lt;/code&gt;：&lt;code&gt;long int&lt;/code&gt;、&lt;code&gt;long double&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;也就是说，&lt;code&gt;short&lt;/code&gt;、&lt;code&gt;long&lt;/code&gt; 都不会用来修饰 &lt;code&gt;char&lt;/code&gt;；但要注意“&lt;code&gt;long&lt;/code&gt; 只修饰整型”并不准确——它是唯一能修饰浮点型的长度关键字（&lt;code&gt;long double&lt;/code&gt;）。而 &lt;code&gt;signed&lt;/code&gt; / &lt;code&gt;unsigned&lt;/code&gt; 与它们不同，可以修饰 &lt;code&gt;char&lt;/code&gt;（&lt;code&gt;signed char&lt;/code&gt;、&lt;code&gt;unsigned char&lt;/code&gt;）和各种整型。&lt;/p&gt;

&lt;h3&gt;
  
  
  2. 长度关系
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;long int&lt;/code&gt; 的长度&lt;strong&gt;大于等于&lt;/strong&gt; &lt;code&gt;int&lt;/code&gt;，不一定大于——例如 64 位 Windows 上两者都是 4 字节；&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;long&lt;/code&gt;、&lt;code&gt;long long&lt;/code&gt; 以及指针类型的长度，与平台采用的&lt;strong&gt;数据模型&lt;/strong&gt;有关；&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;long double&lt;/code&gt; 的长度更是随平台而变：MSVC 下与 &lt;code&gt;double&lt;/code&gt; 同为 8 字节，x86 架构的 Linux / GCC 下常为 16 字节。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. 什么是数据模型
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;数据模型（data model）&lt;/strong&gt; 指的是：在特定的操作系统、CPU 架构和 ABI（应用程序二进制接口）下，对 C/C++ 中基本整数类型（&lt;code&gt;short&lt;/code&gt;、&lt;code&gt;int&lt;/code&gt;、&lt;code&gt;long&lt;/code&gt;、&lt;code&gt;long long&lt;/code&gt;）以及指针类型位宽（字节数）的一套约定。它的名字通常由各类型的宽度缩写拼成，例如 &lt;strong&gt;LP64&lt;/strong&gt; 表示 long 与 pointer 是 64 位、int 是 32 位。常见的有：&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;数据模型&lt;/th&gt;
&lt;th&gt;int&lt;/th&gt;
&lt;th&gt;long&lt;/th&gt;
&lt;th&gt;long long&lt;/th&gt;
&lt;th&gt;指针&lt;/th&gt;
&lt;th&gt;典型平台&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;LP64&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;64 位 Linux、macOS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LLP64&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;64 位 Windows&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ILP32&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;32 位系统&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;（单位：字节）&lt;/p&gt;

&lt;p&gt;这就解释了为什么同一句 &lt;code&gt;sizeof(long)&lt;/code&gt;，在 Windows 下得 4、在 Linux 下得 8——不是编译器“任性”，而是它们各自遵循的数据模型不同。写跨平台代码时，不要对 &lt;code&gt;long&lt;/code&gt; 的具体宽度做假设；确实需要固定宽度时，可用 &lt;code&gt;&amp;lt;stdint.h&amp;gt;&lt;/code&gt; 里的 &lt;code&gt;int32_t&lt;/code&gt;、&lt;code&gt;int64_t&lt;/code&gt; 等定长类型，或直接用 &lt;code&gt;sizeof&lt;/code&gt; 量一量。&lt;/p&gt;

&lt;p&gt;这一部分内容作了解。&lt;/p&gt;

&lt;h3&gt;
  
  
  4. sizeof 的返回值类型：size_t
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;sizeof&lt;/code&gt; 的返回值，C 语言只规定它是一个&lt;strong&gt;无符号整数&lt;/strong&gt;，并没有规定具体是哪种类型，而是留给系统自己决定：可能是 &lt;code&gt;unsigned int&lt;/code&gt;，可能是 &lt;code&gt;unsigned long&lt;/code&gt;，也可能是 &lt;code&gt;unsigned long long&lt;/code&gt;，对应的 &lt;code&gt;printf&lt;/code&gt; 占位符分别是 &lt;code&gt;%u&lt;/code&gt;、&lt;code&gt;%lu&lt;/code&gt;、&lt;code&gt;%llu&lt;/code&gt;。这就给程序的可移植性带来了麻烦。&lt;/p&gt;

&lt;p&gt;为此，C 语言引入了一个类型别名 &lt;strong&gt;&lt;code&gt;size_t&lt;/code&gt;&lt;/strong&gt;，用它来统一表示 &lt;code&gt;sizeof&lt;/code&gt; 的返回值类型：在当前系统上，&lt;code&gt;size_t&lt;/code&gt; 究竟是 &lt;code&gt;unsigned int&lt;/code&gt; 还是 &lt;code&gt;unsigned long long&lt;/code&gt;，由系统自行决定，程序员只要写 &lt;code&gt;size_t&lt;/code&gt; 即可。&lt;code&gt;size_t&lt;/code&gt; 类型的值，打印时使用的占位符是 &lt;code&gt;%zu&lt;/code&gt;。&lt;/p&gt;

&lt;h2&gt;
  
  
  十四、ASCII 字符集
&lt;/h2&gt;

&lt;p&gt;接下来介绍一个很重要的概念——ASCII 字符集。&lt;/p&gt;

&lt;p&gt;在前文的叙述中，代码直接使用了 &lt;code&gt;0&lt;/code&gt;、&lt;code&gt;9&lt;/code&gt;、&lt;code&gt;a&lt;/code&gt;、&lt;code&gt;z&lt;/code&gt; 这些字符来定义变量，显然没有报错；可我们又在最开始提到，计算机使用的是二进制语言。按道理，这样的代码应该出错才对。这个疑问，就是靠 ASCII 字符集解决的。&lt;/p&gt;

&lt;p&gt;在 ASCII 字符集中，规定了 128 个字符各自对应的数值（完整对照表如下图），后来 ASCII 码常被扩展为 256 个字符，目的是兼容更多国家语言中的字符。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkoth0tttr3su9a29wgwx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkoth0tttr3su9a29wgwx.png" alt=" " width="800" height="1004"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;这些字符大致可以分成三段：&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;范围&lt;/th&gt;
&lt;th&gt;内容&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;0 ~ 31、127&lt;/td&gt;
&lt;td&gt;控制字符（如换行 &lt;code&gt;\n&lt;/code&gt; 对应 10）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;32 ~ 126&lt;/td&gt;
&lt;td&gt;可显示字符（空格、数字、字母、标点符号）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;128 ~ 255&lt;/td&gt;
&lt;td&gt;扩展 ASCII，由各国自行定义&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;说到底，这个字符集就是一种特殊的映射关系——它把每个字符都映射成了一个整数。&lt;/p&gt;

&lt;p&gt;到了这里，也不难发现：既然字符都能对应一个整数，那么&lt;strong&gt;字符类型其实也是一种整型&lt;/strong&gt;。换句话说，&lt;code&gt;char&lt;/code&gt; 本质上就是一个（通常占 1 字节的）小整数，&lt;code&gt;'A'&lt;/code&gt; 只是 65 的一种“写法”而已。这也解释了为什么 &lt;code&gt;char&lt;/code&gt; 可以参与整数运算，以及为什么前文说 &lt;code&gt;signed char&lt;/code&gt; 的范围是 -128 ~ 127。&lt;/p&gt;

&lt;p&gt;我们不需要记住所有映射对应关系，使用时查表即可，不过最好记住数字和大小写字母这几组的规律：&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;字符&lt;/th&gt;
&lt;th&gt;ASCII 值&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;'0'&lt;/code&gt; ~ &lt;code&gt;'9'&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;48 ~ 57&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;'A'&lt;/code&gt; ~ &lt;code&gt;'Z'&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;65 ~ 90&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;'a'&lt;/code&gt; ~ &lt;code&gt;'z'&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;97 ~ 122&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;三组都是连续排列的：数字最小、大写字母居中、小写字母最大；并且 &lt;code&gt;'a'&lt;/code&gt; 恰好比 &lt;code&gt;'A'&lt;/code&gt; 大 32。&lt;/p&gt;

</description>
      <category>c语言</category>
      <category>编程入门</category>
    </item>
  </channel>
</rss>
