top/contents search

5. 空指针

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 NULL0L。这是为什么?

5.8 对于函数指针,NULL是否有效?

5.9 如果NULL0作为空指针常量是等效的,我应该使用哪一个?

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 运行时的“空指针赋值”错误是什么意思?我该如何追踪它?


回到顶部

contents search
关于此 FAQ 列表   关于 Eskimo   搜索   反馈   版权

Eskimo North 托管