第7講 ポインタ
第9話 なぜポインタというの?
(以下は初心者の方には難しいと思いますので、
読み飛ばすか、軽く読んでそういうものなんだと受け取るかにして下さい。)
ポインタは箱の住所を収納する箱です。
第3話に扱ったコードを
#include<iostream> //入出力のために組み込む
using namespace std; //coutを使えるようにするために必要
void f(); //関数f()のプロトタイプ宣言
int main() {
f(); //関数f()に仕事を命じている
return(0);
}
void f() {
int *b = (int *)malloc(sizeof(int)); //ポインタbの宣言
*b = 1; //箱*bに1を入れる
cout << "b =" << b << endl; //アドレスを入れる箱bの中身を表示
cout << "*b=" << *b << endl; //箱bの中身=アドレスにある箱の中身の表示
}
を例にすると、
(メモリは毎回変わりますので、と一致していません。
ですから、上の数字は仮の数字です。
しかも、C言語入門講義から借用しましたので、
10進数表示になっています。)
bは住所によって、*bを指し示しめしています。
そこで、bを*bへのポインタという言い方をします。
では、
#include<iostream> //入出力のために組み込む
using namespace std; //coutを使えるようにするために必要
void f(); //関数f()のプロトタイプ宣言
int main() {
f(); //関数f()に仕事を命じている
return(0);
}
void f() {
int *b = (int *)malloc(sizeof(int )); //ポインタbの宣言と初期化
int **c;
*b = 1;
cout<< "箱*bの中身 = "<< *b;
cout<< "箱bの中身 = "<< b;
c = &b;
cout<< "箱bの住所 = "<< c;
}
の場合はどうでしょうか。
実は住所を入れる箱bも住所を持っています。
bも変数にすぎないのでメモリ番地を持っているのです。
(番地は仮の数字です。
しかも、C言語入門講義から借用しましたので、
10進数表示になっています。)
ポインタ変数(メモリアドレス=メモリ番地を収納する箱)自体もメモリ番地を持っています。
(もちろんc自身にもメモリ番地があります。)
cはbの住所によってポインタbを指し示していますので、
ポインタへのポインタといいます。
私自身は〜へのポインタという表現は好きではありませんから、
基本、本サイトではそのような表現は取りませんが、
もし他のサイトや書籍で見かけたときは、
この話を参考にして下さい。
さて、C言語の魔法の話が出来る段階まで来ました。
箱は渡すことは出来ないのに、
仕事を依頼した人にその箱の中身を変えてもらうことの出来る不思議な魔法について、
第8講においていよいよ説明しましょう。