無効である、空のポインタ。
ポインタは、メモリやオブジェクトの参照に必要な概念のため、Cやその系統の言語を始め、多くの言語で用いられている。
この時、ものを指している状態の他に、何も指していない状態が表現できないと、何かと不便である。そこで、この何も指していないポインタを用意し、これをNULLポインタとする。
Cの標準規格では、NULLというマクロ定数が定義されており、キャストの差はあれ、値としては0が定義されている。
次のように使うことが出来る。
char *p = NULL;
if (!p) { … /* if (p==0) と等価 */
世の中には様々なマイクロプロセッサがあり、現実にNULLポインタの内部表現が「0番地」では無いものも存在する。
しかしこの場合でも、ソースコード中の値は0のままで良い。なぜなら、NULLポインタというものは抽象的な概念であり、物理的なアドレスを指しているわけではないからである。
もし内部表現が0でない計算機の場合、必要に応じてCコンパイラはその値に自動的に変換してくれる。従って、NULLポインタと0は完全に等価であり、可換であるとして扱うことが出来る。