第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 | 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 | 5 |
i | 013B8370 |
そして、iをポインタと呼びます。
つまり、先頭アドレスを入れる変数をポインタというのです。
第2話へ 第4話へ
魔方陣 数独で学ぶ VBA 入門
数独のシンプルな解き方・簡単な解法の研究
VB講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 C++ 入門 基礎から応用まで第1部
eclipse java 入門
java 入門 サイト 基礎から応用まで
VC++ C言語 C++ 入門 初心者 基礎から応用まで
本サイトトップへ