5.1 这个臭名昭著的空指针到底是什么?
5.2 我如何在我的程序中获得一个空指针?
5.3 指针比较的缩写形式“if(p)”用于检查非空指针是否有效?如果空指针的内部表示不是零呢?
5.4 什么是NULL,它是如何定义的?
5.5 在使用非零位模式作为空指针内部表示的机器上,NULL应该如何定义?
5.6 如果NULL定义如下:
#define NULL ((char *)0)那么传递未转换的NULL的函数调用是否会工作?
5.7 我的供应商提供的头文件中#define NULL为0L。这是为什么?
5.8 对于函数指针,NULL是否有效?
5.9 如果NULL和0作为空指针常量是等效的,我应该使用哪一个?
5.10 但是,为了以防NULL的值改变(可能在具有非零内部空指针的机器上),使用0(而不是NULL)不是更好吗?
5.11 我曾经使用一个编译器,如果NULL没有被使用,它就无法工作。
5.12 我使用预处理器宏
#define Nullptr(type) (type *)0来帮助我构建正确类型的空指针。
5.13 这很奇怪。NULL保证是0,但空指针却不是?
5.14 为什么空指针会有如此多的困惑?为什么这些问题如此频繁地出现?
5.15 我很困惑。我就是无法理解所有这些空指针的东西。
5.16 考虑到围绕空指针的困惑如此之多,要求它们在内部用零表示不就更简单了吗?
5.17 说真的,有没有实际的机器真正使用过非零空指针,或者对不同类型指针使用不同的表示方式?
5.18 将运行时的整数值 0 强制转换为指针,是否保证会成为一个空指针?
5.19 我如何访问位于机器地址 0 处的中断向量?如果我将指针设置为0,编译器可能会将其转换为某个非零的内部空指针值。
5.20 运行时的“空指针赋值”错误是什么意思?我该如何追踪它?