ソフトを作ってみたい (1/4)

 C言語を独学で学ぼうとすると「ポインタ」が壁に感じるかもしれません。 しかし、実際にはそんなに難しい考え方ではありません。

 そういうこともあったので、ポインタについて簡単にまとめてみたいと思います。

変数

 ポインタの前に「変数」について考えてみたいと思います。 そもそも変数が分からない方はまず、 「変数とは」のページをご参考にしてください。

変数とは箱のようなものである

 変数というのは「数字」や「文字」 を入れるのようなものだとよく言われます。 これを絵にしたのが右の図で、右の絵ではAという名前の変数に 25という数字を代入しています。

 ここで覚えておいて欲しいことは、 代入するために「A = 25」と書いたりするけれども、 Aという変数そのものと 25 が全く同じものではない ということです。 右の図では、Aという変数は「箱」で25は「数字」で別のものですね。

 変数というのは 実際の値を入れておくための場所であると 考えてください。 必要に応じてその中身を書き換えたり(代入)、 中身を取り出したりできます。

変数が複数あると

 次に、変数が複数ある場合について考えてみます。

 ここで、一度先ほどの箱をいくつか並べてみることにましょう。

 それぞれの箱に値を入れることができます。 それぞれの箱には名前が付いています。

 次に下の図を見てください。

 ここには、いくつ目の箱かを示す番号が振られています。 上の2つの図が同じものである場合、次のような表を書くことができます。 この表さえ知っていれば、名前から番号を割り出すことができます。

番号 1 2 3 4 5
名前 A C A2 D g

 つまり、「Aの番号を教えてください」というような事ができるようになります。

 また、変数Cを読み取ったり書き込んだりするのと、 番号が「2」の変数を読み取ったり書き込んだりするのは、まったく同じことです。

順番が分かると…

 番号が分かると何がうれしいのでしょうか? 次の例を考えてみましょう。

  1. 変数Dに「50」という数字を代入する。
  2. 変数Zに変数Dの中身(つまり「50」)を代入する。
  3. 変数Zに、元のZの数字の2倍、つまり 50×2で「100」を代入する。

 すると、変数Dはいくつでしょう? もちろん、「50」ですね。 (はじめに50を代入してから、Dには何も代入していないため。)

 今度は次の例を考えてみましょう。

  1. 変数D(番号は4)に「50」という数字を代入する。
  2. 変数Zに変数Dの番号(つまり「4番」)を代入する。
  3. 変数Zの指している場所(4番)に、 変数Zの指している場所(4番)の数字の2倍 (つまり 50×2で「100」)を代入する。

 今度は変数Dはいくつになっているでしょう。 よく考えてみてください。答えは100です。


 ここで重要なのは、 変数Dを直接さわらなくても、 変数Dの値を変えることができるということです。

ポインタ

 さて、ポインタというのは、 上の説明で言う「番号」のことです。 上で言っていることが分かれば、 ポインタが何であるかが、分かったことになります。

 ところで、上の例を考えてみてください。 変数Dには「4番」という番号が付いていましたが、 「4番」という番号を知らなくても、 上の操作を行うことができます。 つまり、ポインタを使う時は、 ポインタの中身が何であるかを気にする必要はありません

なぜポインタが便利なのか

 今度は次の例を考えてみてください。

「A」という操作は
  『変数Zの指している場所に、 変数Zの指している場所の数字の2倍を代入する。』
であるとする。

1. 変数Bに15を代入。
2. 変数Cに20を代入。
3. 変数Zに変数Bの「ポインタ」(つまり上でいう番号)を代入。
4. 「A」を行う。
5. 変数Zに変数Cの「ポインタ」(つまり上でいう番号)を代入。
6. 「A」を行う。

 「A」という操作を行うだけで、変数Bや変数Cを書き込むことができました。

まとめ

 ここまで分かれば、ポインタがどんなものであるか大体分かると思います。

 せっかくなので言っておくと、 ポインタがさらに活躍するのは、配列と組み合わさった時です。 これも調べてみるといろいろ役に立つと思います。

 どうしたらポインタを分かりやすく説明できるだろうと思って、 このような解説にしました。 意見や質問がある方は、 気軽に掲示板にて声をかけてください。

トップページ

2007/7/3 更新