おわりにまえおき巷では「プログラマーになりたい人に初学者にとって、ポインタという考え方がわけわかめ」という話がよくあります。そこでいろいろな人が「ポインタは住所だ」とか「変数がハコで」とか手を変え品を変え分かりやすいように説明してくれています。それでもなお「ポインタがわかりづらい」という人が後を絶ちません。こと、例え話をやめてド直球で攻めたらいいんじゃないでしょうか。Worldより簡単にサンプルコード以下のコードを考えます。<stdio.h>」なんていう謎のオマジナイはこの際ナシです。あんなもの無くたってC言語は成り立ちます。見ての通り、どこにも何も出力されませんが。b」という計算を行います。このとき、変数aが1で変数bが2です。ここまでは良いですね?さて、この「変数c」というのは、いったいどこにあるでしょうか。コンピューターの世界なんて、突き詰めればほとんどのものがCPUかメモリかストレージかネットワークのどれかです(暴論)。「変数c」というものが、メモリのどこかにあります。「メモリってなんなのかわかんないよー」という人は、パソコン屋さんに行ってメモリの実物を見てくるといいでしょう。DDR4だのDIMMだの難しい言葉と一緒に売られています。あの、パソコンショップで売られている緑の板に黒い四角いのが付いたアレ、あのメモリの中に「変数c」というのが入るわけです。ふだん、「変数cがどこにあるか」というのは、プログラマーが気にするべき部分ではないです。pythonだのなんだの最近の流行の言語では特にそうです。いう低レベルなお話を気にせずにプログラミングできるようになっています。ポインタの話をしたいなら別です。「変数cがどこに入っているか気になる!」というのがポインタの本質であり、ポインタの存在意義です。変数が入っているところを見てみるせっかくです。変数cが実際におかれている場所を見てみましょう。以下の手順は別にどんな操作をやっているかわからなくても良いです。さっきのコードを適当に保存して、gccに-gオプションをつけてコンパイルしてしまいます。test.cできたバイナリをgdbで開いて、main関数にブレークポイントを張ってから実行しましょう。glibc-2.17-196.el7_4.2.x86_64main関数のアタマで止まりました。変数cの場所を確認します。0x7fffffffe494変数cは、メモリ上の「0x7fffffffe494」という場所にあるようです。メモリ上の場所のことを「アドレス」と言います。さあ、混乱してきましたね。初学者の皆さんは以上のことを深く考えなくても良いです。変数がメモリ上にある、ということを覚えてください。C言語とメモリ変数がメモリ上にあることがわかりました。C言語は非常に低次元のプログラミング言語です。プログラムの管理下にあるメモリは好きにいじることができます。いいですか、メモリは好きにいじれます。変数cの「まわり」を見てみる変数cは、変数cだけがぽつんと置いてあるわけではありません。メモリというのは前にも後ろにも連続しています。まわりを見てみましょう。0x00007fff上から2行目、左から2列目に「0x00000003」と書いてありますね。前後にもいろいろ書いてありますね。ひとつ右の「0x00000002」が変数bで、もうひとつ右が変数aです。それ以外にもいろいろありますが、まあよくわからないので深く考えないでおきましょう。このように、プログラミング言語で書いた変数は、プログラムを実行するときにはメモリのどこかに割り当てられるわけです。変数ってなんだ変数a,b,cがメモリ上では隣り合ったアドレスに割当たっていることがわかりました。変数というのは、コンピュータにとって何でしょう。教科書なんかには「変数っていうのはハコみたいなものでー」とか書いてありますね?でもメモリはハコみたいなものではないです。緑の板に黒いナンカが付いたやつです。教科書に書いてあるのは例え話です。C言語にとっての答えは、「変数とは、メモリのアドレスに付けられた名前のこと」です。いいですか、「変数c」があるのではなくて、「0x7fffffffe494」という場所(アドレス)に「変数c」という名前を付けているんです。アドレスはどう決まるの?じゃあ「0x7fffffffe494」が「変数c」だと誰が決めたんでしょうか。プログラマーではないですね?だって最初に書いたc言語のコードには、「0x7fffffffe494」なんて書いてません。正解はコンパイラです。コンパイラが、「変数cという場所が必要なようだから、そのぶんメモリを用意しておこう。0x7fffffffe494を変数cと名付けよう」と決めているんです。コンパイラの種類によっては他のメモリアドレスが割当たることもあります。コンパイラがこういったことを考えてくれるおかげで、われわれプログラマーは「変数c」というものの正体を深く考えずにプログラミングできるわけです。ポインタを使ってみようあたらしいコードを考えます。b;}ポインタ変数pが出てきました。b」を計算していますが、bはどんな値も代入していませんね。cには何が入るでしょう。bを計算するとき、aは1です。そこは皆さん疑問がないでしょう。