606じゃないけど便乗させてください。

�@char c[][5] = {"hoge", "piyo"};
�Achar *c[] = {"hoge", "piyo"};
�Bchar **c = {"hoge", "piyo"};
これらはどこが違うんですか?�Bはエラーになりますよね
────────────────────────────────────────

char **pp;
pp = c;
こういう風にできないのはなぜでしょう?�@はエラーになりますよね
────────────────────────────────────────

char *c[] = {"hoge", "piyo"};
char **pp;
pp = c;

�@printf("%s", &pp);
�Aprintf("%s", pp[0]);
────────────────────────────────────────
この�Aが正しいのは直感的に分かるのですが、�@がおかしなことになるのは何故でしょう?
&ppは「ポインタのポインタ」の所持する値(アドレス)のポインタ(アドレス)を指し、
そのアドレスは"hoge"の先頭だと思っていたのですが。

どうも理解していたつもりが、全然理解できていなかったようです。