空指標

在编程语言中，空指针（英语：Null Pointer）是一个已宣告但并未指向一个有效对象的指针，许多程序利用空指针来表示某些特定条件，例如未知长度数组的结尾或某些无法运行的操作。在可选择类型（optional type）的编程语言中，空指针通常可以跟可为Null的类型（Nullable types）和空值（Nothing value）进行比较。
空指针与未初始化的指针（uninitialized pointer）不同，空指针保证不会和有值的指针相等，而未初始化的指针则是要看所使用的编程语言或编译器而定，在部分编程语言环境下，未初始化的指针无法保证不与有值的指针相等，他可能因为存有存储器残值而指向了某个有效对象。

空引用

在编程语言中，空引用（英语：Null Reference）是一个与空指针类似的概念，是一个已宣告但其并未引用到一个有效对象的变量。东尼·霍尔在1965年发明了空引用，并作为ALGOL W编程语言的一部分。

历史

查尔斯·安东尼·理察·霍尔（C. A. R. Hoare）在2009年表示他在1965年发明了空引用，并且将这项发明描述为“十亿美元的错误”。

C语言

在C语言中，任何2个空指针都保证是相等的，其是由前处理器的宏提供，即NULL，其被定义为用来表示空指针的常量值，在C99是透过隐含转换或直接转换成void*的整数值0来使用。
在C语言中，空指针的值表示为#define NULL (void *)0。
C语言标准并没有规定存储器位置0与空指针相同，随然实际上存储器位置0与空指针在大部分的情况下会是相同的。对空指针取值在C语言中是一个未定义行为，在实现上，取值时必须确保所取的指针不为空。

C++语言

在C++语言中，同样有继承自C语言的NULL宏可供使用，但在传统上会优先使用整数零来表示空指针常量。在C++11标准中已明确的引入一个常量（部分编译器视之为关键字，如Visual Studio）nullptr做为表示空指针的常量。

nullptr

nullptr是C++11语言中的关键字，在C++11语言标准用来表示空指针的常量值。其类型为nullptr_t。

NullPointerException

空指针错误是一种常见的程序错误，当尝试访问空指针所指向之对象时，就会发生NullPointerException，通常是因为对象未顺利初始化或者提前析构而造成。空指针错误常常出现在类别设计或管理上有缺陷的程序中，一旦出现了空指针错误经常会导致程序死机或崩溃。而在部分编程语言中，则有NullReferenceException（空引用错误），例如.Net平台。
在Java中，NullPointerException被定义在java.lang.NullPointerException，是一种运行阶段错误（java.lang.RuntimeException）。