第7講 ポインタの学習
第3話 ポインタとは何?

まず、ポインタとは何かを説明する前に、
箱であると説明してきた変数について、
もう少し正確な説明をします。
VC++ C言語 C++ 入門 初心者 基礎から応用まで
の該当部分をそのまま引用しましょう。

変数iとは何でしょうか。

今まで箱のイメージで説明してきましたが、
正確に言うと、メモリの番地が割り当てられている、のです。
int i;と宣言し場合、

例えば、メモリーの番地の1000から1004をiのメモリー領域にあてるのです。
int型は、4バイトなので4飛びになっています。

char i;と宣言した場合は、char型は1バイトなので
となります。
double i;なら8バイトで
となります。

実際、次のようなコードを組んでみてください。
#include<iostream>
#include <stdlib.h>
using namespace std;
void main(){
   int i;
   i=5;
   cout<<"i="<<i<<endl;
   cout<<"&i="<<&i<<endl;
}
すると、実行結果は
i=5
&i=00B6FA64
(結果は毎回違います。
また、使っている環境によって変わります。
ですから、皆さんが同じコードで実験しても同じにはなりません。)
となります。
&iとは、iのアドレスです。
メモリーアドレスは、16進数表示です。
16進数の場合0,1,・・・,9の後は、A,B,C,D,E,F,Gです。
は比喩で、
実際には16進数表示00B6FA64のようなアドレスです。
int型は4バイトですから、
00B6FA64~00B6FA68
のメモリー領域が変数iのデータ領域として当てられるのです。
そして、
   i=5;
などが行われると、
メモリー領域00B6FA64~00B6FA68にデータが書き込まれるのです。

ポインタとは何かを理解するために、
コードを次のように書き換えてください。
#include<iostream>
#include <stdlib.h>
using namespace std;
void main(){
   int *i=(int *)malloc(sizeof(int));
   *i=5;
   cout<<"*i="<<*i<<endl;
   cout<<"i="<<i<<endl;
}
すると、実行結果は、
*i=5
i=013A9498
となります。
メモリーアドレスは毎回違ってしまいますので、
アドレスが異なっていますが、
*iが変数の中身すなわち箱(メモリー領域)に入っているデータで、
iが変数*iのアドレスであることが分かります。
(ここはもっと正確に表現すると、
*iは変数そのもの=箱で、
   cout<<"*i="<<*i<<endl;
によって、箱の中身である5が表示(参照)されいて、
iは*iのアドレスを入れる箱で、
   cout<<"i="<<i<<endl;
によって、箱の中身のアドレス013A9498が表示(参照)されています。)
つまり、
   int i;
と宣言した場合は、iが変数ですし、&iがアドレスです。

そして、
   int *i=(int *)malloc(sizeof(int));
と宣言した場合は、*iが変数ですし、iがアドレスなのです。

表にすると

  変数  アドレス 
int i;   i &i 
int *i=(int *)malloc(sizeof(int));   *i


sizeof(int)はint型のサイズすなわちint型の容量で
4バイト(システムによって異なる場合があります。)です。
ですから、
   int *i=(int *)malloc(4);
としても同じです。
   int *i=(int *)malloc(sizeof(int));
は変数*iを定義して、
4バイト分のメモリー領域を確保する(割り当てる)という意味です。

*iは2つの変数をもっていると考えてください。
普通の変数*iと*iの
先頭アドレスを入れる変数iです。
先頭とわざわざ断っている理由は、
*iには先頭アドレスから4バイト分のアドレスが割り振られているからです。
例えば、先頭アドレスが013B8370でしたら、
013B8370~013B8374のアドレスです。
*iのアドレスは先頭アドレス013B8370で代表させることになっているのです。

*i 
013B8370

そして、iをポインタと呼びます。
つまり、先頭アドレスを入れる変数をポインタというのです。



第2話へ 第4話へ

a

魔方陣 数独で学ぶ VBA 入門
数独のシンプルな解き方・簡単な解法の研究
VB講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 C++ 入門 基礎から応用まで第1部
eclipse java 入門
java 入門 サイト 基礎から応用まで
VC++ C言語 C++ 入門 初心者 基礎から応用まで
本サイトトップへ