ポインタとは指し示すものです。
さんまさんやタモリさんが持ってる指がついた指し棒だと思ってください。

指し棒はその形状を変えることはありません。その指し示す場所が変わるだけです。
同一形状でありながら指し示すものを変えることができるのです。
つまりさんまさん達は指し棒を別の指し棒に持ち替えることなく別のものを示す事ができます。
指し棒の指す場所を変えればいいだけです。

この指し棒がポインタであり、
指し示す場所がアドレス、
指し示した場所に書かれたものが実体です。

ただし、ポインタだけでは用を成さないので、C言語では
ポインタ変数に対して*演算子を摘要することで実体を、
変数に&演算子を摘要する事でアドレスを取り出せるようになっています。

で、入門者が良くやってしまうのは、何も書いていない場所、
書いたり読んだりしてはいけない場所、もしくは存在しない場所を指し示そうとしてしまう事です。
ポインタは意味のあるものを指し示すことによって、はじめて意味があるものになります。

特別なアドレスNULLも例外ではありません。
ポインタの指し示す場所がNULLであった場合、何も指し示していないと解釈されます。
ポインタの指し示す場所が自動的にNULLになる事はなく、
プログラマが何も指し示していない事を明示するためにポインタ変数に代入します。
つまりポインタの指し示す場所がNULLであることも十分に意味を持っています。

ダブルポインタも別に難しくありませんね。
指し棒の指す実体が指し棒でありその指し棒が指したものが目指す実体です。