これは C で何を意味しますか:
char strings[USHRT_MAX][50];
文字列と呼ばれる文字のギザギザの配列を作成していますか?
いいえ、上記は文字列のギザギザの配列を作成しません。USHRT_MAX
2 次元の文字配列を作成し、最大 49 文字の長さの C 文字列を格納できます (50 番目char
はターミネータに使用され'\0'
ます)。
ジャグ配列の宣言は次のようになります。
char *strings[USHRT_MAX];
ポインターの配列では、個々の文字列にメモリを割り当てる必要がありますが、文字列の長さは要素ごとに異なる可能性があります。一方、配列にはすべてのメモリが割り当てられていますが、文字列の長さに制限があり、短い文字列を格納するために必要な量よりも多くのメモリを使用する可能性があります。
これ:
char strings[USHRT_MAX][50];
文字の 2 次元配列を提供するだけです。サイズはUSHRT_MAX
50 です。これはジャグ配列ではありません。ジャグ配列とは、さまざまな長さの行を持つ配列です。概念的には次のようになります。
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 番目の例では、各行に同じ数の要素がありますが、すべての要素が満たされているわけではないことに注意してください。