0

私が読んでいる本のこのスニペットに混乱しています。テキスト文字列は配列に入れられcharます。4 つの単語があり、配列には 4 つの要素があります。待ってください。ただし、これは、1 つのchar要素にテキスト文字列全体が含まれていることを意味します。確かにchars一文字しか扱えない。これがコードです。

const char *words[4] = { "aardvark", "abacus", 
    "allude", "zygote" };

それで、何が得られますか?chars作成者は文字列全体を保存するためにどのように使用できますか? 解決策が目に見えないほど明らかであることはわかっていますが、それを見ることができません。また、constキーワードは何ですか?この配列を使用して各単語の長さを数えることだけを計画しているのに、なぜ読み取り専用にする必要があるのでしょうstrlen()か?

4

3 に答える 3

7

コードは文字列を格納するためにcharを使用しません。宣言は、の配列で char *あることに注意してください。

Acharは単一の文字を保持でき、achar *は、標準のC文字列を保持できる文字配列の最初の要素を指すために使用できます。これは重要なCの基本です。aを参照しchar *てください。すぐにnullで終了するC文字列について考える必要があります。

同様に、anを使用して、配列の最初のアドレスを保持することにより、のint *配列全体を参照できます。を使用して宣言された配列と同じように添え字を付けることができます。int intint*[]

Achar *を使用して、単一文字のアドレスを保持することもできます。つまり、nullで終了する文字列の最初の文字ではありません。

于 2012-09-17T17:44:31.997 に答える
3

作者はどのようにして文字を使用して文字列全体を格納できますか?

彼はできません。アスタリスクに気づきましたよね?

于 2012-09-17T17:45:02.970 に答える
3

あなたの行方不明のポイントは*です。

char letter = 'a';  //stores a single character
char *word = "bigger"; //stores a string literal

これは、単語が実際に次のことを意味します。

word ---> [b][i][g][g][e][r][\0]

文字の束(または文字の「文字列」)を指します。あなたの例では、作者は次のように定義しています。

const char *words[4] = { "aardvark", "abacus",      "allude", "zygote" }; 

つまり、定数の4つの文字列があります。constは、そこにそれを追加するための作者の選択でした...それは省略された可能性があります。これは単なる安全策であり、これらの値は変更する必要がないことをコンパイラー(および作成者)に通知します。

于 2012-09-17T17:50:05.330 に答える