-1

これは C で何を意味しますか:

char strings[USHRT_MAX][50];

文字列と呼ばれる文字のギザギザの配列を作成していますか?

4

2 に答える 2

5

いいえ、上記は文字列のギザギザの配列を作成しません。USHRT_MAX2 次元の文字配列を作成し、最大 49 文字の長さの C 文字列を格納できます (50 番目charはターミネータに使用され'\0'ます)。

ジャグ配列の宣言は次のようになります。

char *strings[USHRT_MAX];

ポインターの配列では、個々の文字列にメモリを割り当てる必要がありますが、文字列の長さは要素ごとに異なる可能性があります。一方、配列にはすべてのメモリが割り当てられていますが、文字列の長さに制限があり、短い文字列を格納するために必要な量よりも多くのメモリを使用する可能性があります。

于 2013-04-01T12:18:57.173 に答える
0

これ:

char strings[USHRT_MAX][50];

文字の 2 次元配列を提供するだけです。サイズはUSHRT_MAX50 です。これはジャグ配列ではありません。ジャグ配列とは、さまざまな長さの行を持つ配列です。概念的には次のようになります。

strings[0] = ['a']['\0']
strings[1] = ['j']['a']['g']['\0']
strings[2] = ['a']['r']['r']['a']['y']['\0']

あなたのものはもっと似ています:

strings[0] = ['a']['\0'][ ][ ][ ][ ]
strings[1] = ['j']['a']['g']['\0'][ ][ ]
strings[2] = ['a']['r']['r']['a']['y']['\0']

2 番目の例では、各行に同じ数の要素がありますが、すべての要素が満たされているわけではないことに注意してください。

于 2013-04-01T13:06:10.413 に答える