5

これらの宣言の違いは?

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) が有効でないのはなぜですか?

4

3 に答える 3

12

char **stringsへのポインタへのポインタcharです。有効な型ですが、しようとしているように配列初期化子で初期化することはできません。

char *strings[]へのポインタの配列でcharあり、その初期化は有効です。

char strings[][]は 2 次元配列を作成しようとする試みですが、最も外側の次元を除くすべての次元のサイズを指定する必要があるため、正しくありません (最も外側のサイズは初期化子から推測できます)。したがって、これは有効です:

char strings[][4] = {"abc", "bca", "rat", "tar", "far"};
于 2013-10-23T12:53:34.953 に答える
1

1) char **strings はポインターへのポインターの宣言であり、文字列の配列ではなく数値の属性が必要です。

2) [] 内でサイズを定義してみてください: char *strings[5]={....

3) 再度、配列のサイズ [x][y] を x = 要素数、y = 最大要素の文字数で定義します。

于 2013-10-23T12:58:28.427 に答える