ご希望通りにたとえ話にしましょう。

将棋盤や碁盤のようなマス目がある板を考えます。各マスには番号を振っておきます。
たとえば1001, 1002, 1003, ... , 1100とあったとします。
各マス目にはいろんなものが置いてあります。一つのマス目には収まらなくていくつかの
マス目にまたがっているものもあります。

ポインタは単なるアドレスではなくどれだけの大きさのものを取り出せばよいか知っています。
char *cp; int *ip; double *rp; とあってcp, ip, rp の値がどれも1001になる場合があり得ます。
そういうときでも *cpとすれば1001からものを取り出してくるし *ipとすると1001から1004にあるものを
とってきます。*rpとすれば1001から1008までを取り出します。

いまたまたま*cpの大きさは1、*ipは4、*rpは8というのは状況によって変わるのですが
宣言時にコンパイラの方が調べて覚えておいてくれるのでプログラマは覚える必要はない。
(むしろ意識してはいけない)

ポインタが単なるアドレスではないというのはこういう意味。