第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つ数えた場所にある値を見ろ」 という意味だったのです。ですから、[ と ] は+や-と同じ、 演算子(計算に使う記号)の仲間だったのです。

 まぁ、この辺は難しいので、わからなくても構いません。

< 前のページへ
お問い合わせ
  • ようかん
  • SG Labs(エスジー ラボ)
  • ITERACY
  • RiceLog(ライスログ)
  • Salesforce導入コンサルティング
  • SES営業向け用語講座

Pagetop