Skip to content

常见问题

这里分模块汇总了程设辅学群中的常见问题及其解答。

基本数据类型、运算符、表达式和语句

有布尔类型吗?

Author:朱宝林

布尔类型的历史:

  • 最早的 C 语言规范中没有布尔类型。
  • C99 引入了 _Bool 类型和 <stdbool.h> 头文件。该头文件定义了 booltruefalse 三个便利宏。
    • bool 展开成 _Bool
    • truefalse 分别展开成 int 类型的 10
  • C23 正式使用 bool 代替 _Bool 作为类型名。truefalse 也直接展开为 bool 类型值。

因此,从 C23 以后,我们终于有了 bool 类型。booltruefalse 全都成为了 C 的关键字。

关于布尔类型的使用:

  • bool 的转换与到其他整数类型的转换不同: (bool)0.5求值为 1 ,然而 (int)0.5 求值为 ​0​。在给 _Bool 类型赋值时需要注意这一点。
浮点数是如何存储的?为什么它不精确?

Author:朱宝林

下面的内容来自《计算机科学导论,请完整阅读以了解浮点数的存储方式。

如果你读完了上面的内容,你应该能理解浮点数存储不精确的原因:

  • 浮点数的尾数部分长度有限,无法存储无限的小数。

有一个经典的例子:0.1 + 0.2 == 0.3 是错的。这一例子在每日一题中也有提及。那么如何解决这个问题呢?只要将误差控制在一定范围内即认为正确,比如:

if(fabs(a - b) < 1e-6) {
  // a 和 b 相等
}

数组、字符串

循环、分支和跳转

函数、标准库与预处理器

文件 I/O

指针、存储类别、链接和内存管理

结构和其他数据形式