第9講 箱の住所を入れる箱(ポインタ)
第5話 なぜポインタは配列のように使えるの?

前々話の疑問に答えましょう。
  int *a;
  a=(int *)malloc(8);
によって、
c++
箱がメモリー番地005E3EC0上に2つ設置されました。
比喩でなく、正確に語ると*aのメモリー領域として、
005E3EC0~005E3EC7までが割り当てられました。
そして、*aはint型で4バイトですから、
2個の箱が用意されたことになります。

 *a  1つ目の箱   2つ目の箱
a 005E3EC0  005E3EC4 

配列宣言
  int a[1];
の場合も

a[i]  a[0]   a[1]
アドレス 005E3EC0  005E3EC4 

のようにアドレスが割り振られるので、
配列とメモリー割り当ては同様です。

それで、配列と同じようにポインタが使えます。
では、ポインタと配列は同じかと申しますと、
違います。
ポインタの方は、アドレスを入れる箱aも同時にもっていますので、
アドレスを直接操作することができ、
配列より、より応用範囲が広いといえます。
第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);
}

aは最初、初期化
  a=(int *)malloc(8);
によってa=005E3EC0
となっています。

a++; すなわち a=a+1; によって
a=005E3EC4
となるます。int型なので、a=a+1; 
によって4加えられるのでしたね。

 *a  1つ目の箱   2つ目の箱
a 005E3EC0  005E3EC4 

つまり2つ目の箱のアドレスになります。
  *a=10;
によって、2つ目の箱に10が収納されます。

配列は、アドレスを入れる箱をもっていませんので、
アドレスをa++; のようにして直接操作することができません。
それに対して、ポインタはアドレスを直接操作できるのです。

では、ポインタを利用して、
C言語
を実現するプログラムを考えてください。

第4話へ 第6話

a

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