C++でゲームを作ってみる。

C++でゲームを作ってみる。

C++を基礎から学んで、ゲーム作れるようになりたい、ってブログ。

Amebaでブログを始めよう!
C/C++独特のポインタ。
ここでつまずく初心者が多いらしいですね。

そこで、初心者だからこそ教えられるものがあると信じて、
ポインタのイメージから具体的な使い方まで、僕なりの解釈で書いてみたいと思います(*・∀・*)

プログラムの中で出てくる全ての変数は(本当に全てか怪しいし、変数以外もいろいろあると思うけど)、メモリ上に置かれます。置かれた場所には番号があって、その番号をアドレスって言います。アドレス(adress)って住所って意味ですよね。変数が住んでる場所ってイメージです。

それと、

「アドレスが同じ変数は、名前が違うとしても、全く同じ変数として扱われる」…♡ 

ってことは覚えておいてください。二人いても、住所が一致したなら同じ人ってなっちゃうんです。
たとえば、a と b って変数があって、この二つのアドレスが一緒だったとした時、a=3 とすると勝手にbにも3が代入され、逆にb=7とすれば、勝手にaにも7が代入されます。だってこの2つは名前が違っても、全く同じものなんですから。

ここでポインタの登場です!(*・∀・*)

ポインタっていうのは、そのアドレス(住所)を入れることができる"変数"です。そうですポインタも変数です!!だからそのポインタもメモリ上のどこかに住んでるですけど、ややこしいのでそのことは置いておきます。とにかく、

「ポインタはある変数のアドレスを入れとくための変数」…☆ 

だってことです。
☆を文章だけじゃなくて、プログラムでも説明してみます。

#include<iostream>
using namespace std;

int main(){
   int a;      //☆で言う、「ある変数」のこと。
   int* p;    //これがポインタ。
   
   p=&a     /*&を変数の前につけると、アドレスがわかります。
                   そのアドレスをポインタpに代入してるだけです。*/
}

アドレスを代入するだけだと、ポインタなんて使わないで普通の変数だけでいい感がしますが、もちろんポインタの機能はまだまだあります。

言ってしまえば、

「あるポインタpがあった時、 *p と書くと、pに入ってるアドレスを持った普通の変数に変わる」…△ 

のです。
例えば、さっきみたいに、int a; なんてして、int* p; p=&a; とした時、pにはaのアドレスが入ってますね。ここで *p ってしてみると、△に書いたように、*pはaのアドレスを持った変数になります。ここでさらに♡に書いたことを思い出すと、a と *p は見た目は違くても、全く同じ変数ってことになります。a=3ってすれば*pも勝手に3になるし、*p=5ってすればaも勝手に5になります。
すごく長ったらしく書きましたが、さらにプログラムで書けばこんな感じです。

#include<iostream>
using namespace std;

int main(){
int a;
int* p;
p=&a;  //ここまでさっきと同じ(☆)

//この時、同じアドレスを持つaと*p(△)は全く同じもの!(♡)

a=3;
cout<<"a="<<a<<" *p="<<*p<<endl;

*p=5;
cout<<"a="<<a<<" *p="<<*p<<endl;

//どちらの場合も、aと*pの値は等しくなってる。
}

すごく基本的なことですが、それだけにゆっくり説明してみました。
ゆっくりすぎてわかりにくいでしょうか??笑
これを読んでポインタ納得できた人がいたら嬉しいです。