第9講 箱の住所を入れる箱(ポインタ)
第3話 ポインタの活用例
例えば、次のようにプログラムの文章を書いて、
機械語に翻訳してプログラムを実行(ビルド)してみましょう。
#include<stdio.h>
#include <stdlib.h>
int main(){
int *a;
a=(int *)malloc(8);
printf("%p\n",a);
*a=8;
printf("%d\n",*a);
a++;
printf("%p\n",a);
*a=10;
printf("%d\n",*a);
}
実行画面
さらに、プログラムの文章を次のように変更しましょう。
#include<stdio.h>
#include <stdlib.h>
int main(){
int *a;
a=(int *)malloc(8);
printf("%p\n",a);
*a=8;
printf("%d\n",*a);
a++;
printf("%p\n",a);
*a=10;
printf("%d\n",*a);
a--;
printf("%p\n",a);
printf("%d\n",*a);
a++;
printf("%p\n",a);
printf("%d\n",*a);
}
実行結果
赤い囲いに注目すると、
2つのデータが保存されていることがわかります。
int *a;
a=(int *)malloc(8);
実は、この宣言と初期化(メモリーの割り当て)で箱は4つ用意されたのです。
なぜかともうしますと、int型は4バイトです。
a=(int *)malloc(8);
でメモリーは8バイト割り当てられています。
ですから、
8÷4=2
の計算から、*aという普通の箱が2個分割り当てられます。
自動的にaというアドレスを入れる箱も2個文割り当てられているからです。
さらに、コードを次ぎようにいじってみましょう。
#include<stdio.h>
#include <stdlib.h>
int main(){
int *a;
a=(int *)malloc(8);
printf("%p\n",a);
*a=8;
printf("%d\n",*a);
a++;
printf("%p\n",a);
*a=10;
printf("%d\n",*a);
a--;
printf("%p\n",a);
printf("%d\n",*a);
a++;
printf("%p\n",a);
printf("%d\n",*a);
printf("\n");
a--;
printf("%d\n",a[0]);
printf("%d\n",a[1]);
}
実行結果
これはどういうことでしょう。
配列を宣言しなかったのに、
配列のように使えています。
第2話へ 第4話
初心者のためのjava 入門 基礎から応用まで
初心者のための VC++による C言語 入門 C++ 入門 基礎から応用まで第1部
初心者のための VC++による C言語 入門 C++ 入門 基礎から応用まで第2部
初心者のための VC++による C言語 入門 C++ 入門 基礎から応用まで第3部
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座へ
VC++入門
VBA入門
専門用語なしのVBA入門
VB入門
初心者のためのEclipseによるJava入門