第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);

}
実行結果
c++
赤い囲いに注目すると、
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]);
}
実行結果
c言語
これはどういうことでしょう。
配列を宣言しなかったのに、
配列のように使えています。





第2話へ 第4話

a

初心者のためのjava 入門 基礎から応用まで
初心者のための VC++による C言語 入門 C++ 入門 基礎から応用まで第1部
初心者のための VC++による C言語 入門 C++ 入門 基礎から応用まで第2部
初心者のための VC++による C言語 入門 C++ 入門 基礎から応用まで第3部
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座へ
VC++入門
VBA入門
専門用語なしのVBA入門
VB入門
初心者のためのEclipseによるJava入門