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」という数字を代入する。 今度は変数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 更新