第7講 箱の住所を代入できる箱(ポインタ)の学習
第2話 ポインタの簡単な実例
誰でも実例がないと、
どんなに丁寧に説明されても理解することは難しいものです。
ここでは簡単に実例を見てから、
解説していくことにしましょう。
#include<stdio.h>
void f();
int main(){
  f();
  return(0);
}
void f(){
  int a,*b;
  a=1;
  b=&a;
  printf("a=%d\n",a);
  printf("a=%d\n",*b);
  printf("*b=%d\n",*b);
  printf("b=%08x\n",b);
  printf("&a=%08x\n",&a);
}
コピペ用添付ファイル
実行結果
a=1
a=1
*b=1
b=0061fe14
&a=0061fe14

皆さんの頭には?がたくさん浮かんでいますよね。
bが実はポインタです。
  b=&a;
の&aは箱aのアドレス=メモリ住所です。
*bでそのアドレスにある箱の中身になります。
ですから、
  printf("a=%d\n",a);
  printf("a=%d\n",*b);
  printf("*b=%d\n",*b);
の3行の実行結果が
a=1
a=1
*b=1

と全部同じになるわけです。

  printf("b=%08x\n",b);
ポインタbの中身が16数表示で示されています。
b=0061fe14
%08xのxは16進数表示08は8桁で上位桁が0ときはそれを表示しなさいの指定です。

  printf("&a=%08x\n",&a);
は箱aのアドレスの表示です。
&a=0061fe14

  printf("b=%08x\n",b);
  printf("&a=%08x\n",&a);
の両者が同じ結果になるのは同然です。
  a=1;
  b=&a;
bにはaのアドレスが入っているからです。
scanf("%d",&n);
の&nも箱nのアドレス=メモリ住所だったわけです。

*と&の関係を表にしておくと

  箱または箱の中身 箱の住所を入れる箱または住所 
int a;と宣言  a &a 
int *b;と宣言   *b

上の表で『または』が入っている理由を説明しましょう。
例えば、
  int a;
  
a=1;
  printf("%d\n",
a);
というコードのとき、同じaでも意味が少し違います。
=の左側にあるとき(a)は箱そのもの009を指し、
それ以外のとき(a)は箱に入っている中身1を意味します。
中身を見ること(実際上は、中身をコピーして使うこと)を参照といいます。
ですから、=の左側にないときは参照を意味します。
  int *b;
  
b=&a;
  printf("b=%08x\n",b);
のbについても同じで、bは住所を収納する箱そのものですし、
bは参照すなわち箱の中身である住所です。

という対応関係になります。

つまり、
  int *b;
と宣言すると、実は2つの箱が同時に用意されることになります。
整数を入れる箱*bとその箱*bの住所を入れる箱bです。


では、皆さんコードを
#include<stdio.h>
void f();
int main(){
  f();
  return(0);
}
void f(){
  int a,*b;
  a=1;
  b=&a;
  printf("a=%d\n",a);
  printf("a=%d\n",*b);
  printf("*b=%d\n",*b);
  printf("b=%08x\n",b);
  printf("&a=%08x\n",&a);
  a=2;
  printf("a=%d\n",a);
  printf("a=%d\n",*b);
  printf("*b=%d\n",*b);
  printf("b=%08x\n",b);
  printf("&a=%08x\n",&a);
}
コピペ用添付ファイル
と変更したら実行画面はどうなりますか?
次話をクリック!

第1話へ 第3話へ

a


初心者のための excel 2016 マクロ VBA 入門講義 基礎から応用まで
vc++ c言語 c++ 入門 初心者 基礎から応用まで
eclipse c++ 入門
魔方陣 数独で学ぶ VBA 入門

数独のシンプルな解き方・簡単な解法の研究
VB講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座

初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 C++ 入門 基礎から応用まで第1部
eclipse java 入門
java 入門 サイト 基礎から応用まで
本サイトトップへ