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