>>775
>・(void *)でキャストしてる意味はなんでしょうか?
>→printf("c = %p, *c = %p, **c = %c¥n", c, *c, **c); としない理由は何でしょうか?
うちのコンパイラ gcc4.3.4/cygwin on Windows では (void *) キャストしろと警告をだしてくるからつけただけです。それだけですから、深い意味はありません。

>下記の認識でよろしいでしょうか

 c はc変数の値そのもの
 *c はc変数が指すメモリの内容。メモリサイズは、この環境では sizeof((char *)) = 4バイト32ビット
 c変数は配列bの各要素を順々に指していく。配列b は char 配列 a の各要素を指している。
*c は配列bの内容。
**c は配列b の各要素が指すメモリ内容を、メモリサイズ sizeof(char) で「取ってきた」その値。

認識はだいたいあっていると思いますので、あとはいろいろ試してみてください。