マルチスレッド版数独自動生成ソフトC++コードを題材とする超初心者のためのVisual Studio C++講義
第8章 ポインタの学習

第1話 ポインタとは?

ポインタは変数や配列のアドレスを収納する変数です。

次のように、定義します。

  int *x;

ここで定義される変数は x というアドレスを収納する変数です。

では *x とは何でしょうか。

アドレスとは住所です。

そして、その住所には家が建っています。

*x はその家の中の住民を指します。

ただし、変数は1つの箱しか持っていませんから、

その家に住んでいる人は1人です。

シングルには部屋番号とその部屋に入っている人がいます。

シングルですから、個人部屋です。

変数は個人部屋で、

配列は複数の部屋が用意されるますが、1つ1つの部屋はシングルで1人しか入れない、

と考えればよいのです。

x に入っているアドレスから家の住所が確定され、

さらに、その家の中身まで参照できるようになるということです。

参照がわかりにくい人は、その家の中身を見ることができると言い換えてください。

何度も言いました。

自分の言葉に翻訳して理解することを。

ただし、誤解している可能性があるので前章や前話などを繰り返して読んで、

誤解があるとわかれば修正していく・・・ということを繰り返していくのが学習の鉄則だと思っています。

コードがないとわかりにくいと思いますので、

簡単なコードを例示します。

新しいプロジェクトを作って追加・新しい項目でFileName.cppを作り、

そのコードをコピペして下さい。

#include<iostream>//インクルードファイルiostreamの読み込み

#include<conio.h>//while(!_kbhit());を使うためのお呪い

#include<string> //文字列変数を使えるようにするために組み込む

#include <iomanip> //setprecisionを使えるように組み込む

#include <cmath>//powなどを使うときに必要

#include <ctime>//time()(←現時刻発生する関数)を使うために必要

using namespace std;//coutを使うときに必要なお呪い

void 社員1();//ポインタを扱う社員の一人

int main() {//私は社長だ。

  社員1();

  while (!_kbhit());//待機させるための命令

  return 0;//int main() を終わるためのお呪い

}

//ポインタを扱う社員の一人
void 社員1() {

  int *x;//int* x という書き方も可 ポインタ変数xを定義

  int a = 5;//普通の変数aを用意してその箱に5を入れる

  x = &a;//変数aのアドレスをxに代入

  cout << "a = " << *x << endl;//ポインタxによる間接参照

  cout << "a = " << a << endl;//aの参照

}
実行結果


a = 5
a = 5


aの住所は&aで表されます。

  cout << "a = " << *x << endl;//ポインタxによる間接参照

はエディタが自動的に

  cout << "a = " << * x << endl;//ポインタxによる間接参照

と書き換えてしまうかもしれませんが、

エディタが書き換えたものは信用して大丈夫です。

実行結果は変わりません。

間接参照とはxに貼っている住所のところに行って、

その家の住民を参照する=その家の住民を見る

ということです。

これで私たちに残された第7章第13和の謎が解明できます。






第7章第18話へ 第8章第2話へ

本講義トップへ