第7章 C言語のポインタ2 ~charポインタとchar配列~
全くと言っていいほど、時間が掛からなかったはずです。
これは、strcpyが一文字づつコピーするのに対して、
住所(アドレス)の代入は、ある住所の表札を入れ替えるようなものだからです。
だから、文字列が長くなればなるほど、charポインタを使った方が有効になります。
以上が、char ポインタの説明です。
最後に一つだけ。
関数 printf や関数 strcpy に文字列の入った変数を引数として渡す時を思い出してください。
変数を「char array[256];」と配列で宣言しておいて、
引数として渡すときは「array」とだけ記述していますね。
何故、カギ括弧を付けずに、「array」とするだけで良いのでしょうか?
皆さんの中には、関数 printf を習ったばかりの頃から、疑問に思っていた人はいないでしょうか?
実は、これは意外と難しいことなので、なるべく説明を後回しにしていました。
C言語では、関数に対して、配列の全体を渡すことができないためです。
ですから、配列の先頭のアドレスだけを渡して、
そこから NULL 文字までを文字列だと判断してもらうのです。
配列の先頭のアドレスは、習ったばかりなのでわかりますね。
リスト18やリスト19の &(array[0]); のことです。
実は、&(array[0]) という記述は、array だけとしても、全く同じになります。
時間があれば、リスト18やリスト19を使って試してみてください。
ptr = &(array[0]); が、ptr = array; になります。
通常は省略されている方をよく使います(たまに、&array[0]を使う人もいます)。
そもそも、array[5]という記述自体が、
「配列の先頭のアドレスであるarrayから、5つ数えた場所にある値を見ろ」
という意味だったのです。ですから、[ と ] は+や-と同じ、
演算子(計算に使う記号)の仲間だったのです。
まぁ、この辺は難しいので、わからなくても構いません。