これらの宣言の違いは?
1.
char **strings = {"abc", "bca", "rat", "tar", "far"};
2.
char *strings[] = {"abc", "bca", "rat", "tar", "far"};
3.
char strings[][] = {"abc", "bca", "rat", "tar", "far"};
(2)のみが有効な宣言です。これらのタイプの違いは何ですか? (1) と (3) が有効でないのはなぜですか?