1. ホーム
  2. c

[解決済み] char *arrayとchar array[]

2022-03-02 13:22:24

質問

と書くと

 char *array = "One good thing about music";

実際に配列を作ると?つまり、これと同じこと?

char array[] = {"One", "good", "thing", "about", "music"};

解決方法は?

宣言と初期化

char *array = "One good thing about music";

ポインタを宣言しています。 array で、31文字の定数配列を指すようにします。

宣言と初期化

char array[] = "One, good, thing, about, music";

は、31文字を含む文字の配列を宣言しています。

そうそう、配列の大きさは、終端である '\0' 文字を使用します。


メモリに並べると、1つ目はこんな感じでしょうか。

+-------+ +------------------------------+
| 配列| --> | "音楽の良いところをひとつだけ" |。
+-------+ +------------------------------+

そして、2番目はこんな感じ。

+------------------------------+
| "音楽の良いところを一つ" |。
+------------------------------+


配列は、配列の最初の要素へのポインタに分解されます。のような配列があった場合

char array[] = "One, good, thing, about, music";

を使用した場合、プレーンな array ポインタが期待されるときは &array[0] .

つまり、例えば関数の引数に配列を渡した場合、それはポインタとして渡されるのです。

ポインタと配列は ほとんど は互換性があります。例えば sizeof(pointer) なぜなら、このポインターは実際のポインターのサイズを返すのであって、何を指しているのかを返すわけではないからです。また、例えば &pointer はポインタのアドレスを取得しますが &array は配列へのポインタを返します。注意すべきは &array 非常に とは異なります。 array (またはそれに相当する &array[0] ). 一方 &array&array[0] は同じ場所を指していますが、型は異なっています。上の配列を使って &array は、タイプ char (*)[31] 一方 &array[0]char * .


もっと楽しむために 多くの人が知っているように、ポインタにアクセスするときに配列のインデックスを使用することが可能です。しかし、配列はポインタに分解されるので、配列でポインタの演算を使うことができます。

例えば

char array[] = "Foobar";  /* Declare an array of 7 characters */

上記で、4番目の要素( 'b 文字) を使用します。

array[3]

または

*(array + 3)

また、加算は 可換 となり、最後も次のように表現できます。

*(3 + array)

という楽しい構文が生まれます。

3[array]