第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

という対応関係になります。
では、皆さんコードを
#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 入門 サイト 基礎から応用まで
本サイトトップへ