学习笔记 – 基础知识 | 每日一练(57)

基础知识练习

学生:如果 NULL 的值改变了, 比如在使用非零内部空指针的机器上,难道用 NULL (而不是 0) 不是更好吗?

小林:不。(用 NULL 可能更好, 但不是这个原因。) 尽管符号常量经常代替数字使用以备数字的改变, 但这不是用 NULL 代替 0 的原因。语言本身确保了源码中的0 (用于指针上下文) 会生成空指针。NULL 只是用作一种格式习惯。

学生:用预定义宏 #define Nullptr(type) (type *)0 帮助创建正确类型的空指针。

小林:这种技巧, 尽管很流行而且表面上看起来很有吸引力, 但却没有多少意义。在赋值和比较时它并不需要。它甚至都不能节省键盘输入。

学生:NULL 可以确保是 0, 但空 (null) 指针却不一定?

小林:使用术语 “null” 或 “NULL” 时, 可能意味着以下一种或几种含义:

1. 概念上的空指针。

2. 空指针的内部 (或运行期) 表达形式, 这可能并不是全零, 而且对不用的指针类型可能不一样。真正的值只有编译器开发者才关心。

3. 空指针常数, 这是一个常整数 0 。

4. NULL 宏, 它被定义为 0 。

5. ASCII 空字符 (NUL), 它的确是全零, 但它和空指针除了在名称上以外, 没有

任何必然关系。

6. “空串” (null string), 它是内容为空的字符串 (“”)。在 C 中使用空串这个术语可能令人困惑, 因为空串包括空字符 (’\0’),但不包括空指针, 这让我们绕了一个完整的圈。

正文完