第11講 ポインタの学習

第3話 ポインタの簡単な実例
誰でも実例がないと、
どんなに丁寧に説明されても理解することは難しいものです。
ここでは簡単に実例を見てから、
解説していくことにしましょう。
第1講第7話で作ったプロジェクトaまたは第3講第1話で作ったプロジェクト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=1
a=1
*b=1
b=0061fe14
&a=0061fe14

となります。
皆さんの頭には?がたくさん浮かんでいますよね。
bが実はポインタです。
  b=&a;
の&aは箱aのアドレス=メモリ住所です。
*bでそのアドレスにある箱の中身になります。
ただし、=の左にあるときは、箱そのものであり、
それ以外のときは箱の参照=箱の中身であることに注意が必要です。
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 *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);
}
コピペ用添付ファイル
と変更したら実行画面はどうなりますか?
次話をクリック!




第2話へ   第4話へ

第2部目次に戻る  第1部目次に戻る

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

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