博士

今度は文字型変数「char型」と整数型変数「int型」の違いを比較しようかの。


ぷうさん「?」

え?文字と数字だから違うのは当たり前じゃん!

ポインタはとっても便利

博士「ここをチェックじゃ」

それでは置いておいて・・・、
整数型変数と文字型変数の一文字分の記録に使用する容量は違うんじゃ。

char型とint型のアドレスを調べるプログラム

#include <stdio.h>
main()
{
   char moji[4]={'A','B','C','D'};
   int data[4]={10,20,30,40};
   char *cpnt;
   int *ipnt;
   int i;

   printf("配列\n");
   for (i=0;i<4;i++) {
      printf("%d:moji[%d]=%c ",&moji[i],i,moji[i]);
      printf("%d:data[%d]=%d\n",&data[i],i,data[i]);
   }

   printf("ポインタ\n");
   cpnt=moji;
   ipnt=data;
   for (i=0;i<4;i++) {
      printf("%d:moji[%d]=%c ",cpnt,i,*cpnt);
      printf("%d:data[%d]=%d\n",ipnt,i,*ipnt);
      cpnt++;
      ipnt++;
   }
}

実行結果

配列
3586:moji[0]=A 3578:data[0]=10
3587:moji[1]=B 3580:data[1]=20
3588:moji[2]=C 3582:data[2]=30
3589:moji[3]=D 3584:data[3]=40
ポインタ
3586:moji[0]=A 3578:data[0]=10
3587:moji[1]=B 3580:data[1]=20
3588:moji[2]=C 3582:data[2]=30
3589:moji[3]=D 3584:data[3]=40

チェック

博士「ここをチェックじゃ」

実行結果を見れば一目瞭然☆
変数の型によってメモリに取られる領域の大きさは、異なっておるということじゃ。
今まで、「ポインタ++」は、アドレスを一つずつ増やして次の値を参照していくと言っておったが、本当はアドレスを増やすのではなく、その型の次の要素を示すように、アドレスを更新するんじゃ。


ぷうさん「怒」

んなこと、今まで処理できてたんだから、今更それもアドレス番地を、またプログラムで調べてまでやんなくっても!ったく!!

まとめ

博士

確認しておいて、損はないんじゃぞ。
つまりじゃ・・・

  1. char型(文字型)

    1バイトの領域を取る
    ポインタは1バイトずつ更新される

  2. int型(整数型)

    2バイトの領域を取る
    ポインタは2バイトずつ更新される








博士「怒」

とまあ、こんなもんじゃろ。
ん?・・・くぉーりゃーっ!寝るんじゃなぁーいっ!


ぷうさん「?」

ほえ?
もうダメー・・・。


博士

あとちょっとで終わるからしっかりせんかい!


困った顔のぷうさん

ううう・・・本当にダメだよ、博士ぇ。


困った顔の博士

仕方ないのう、ちょっと休憩、おまえさんが好きなコーヒーで一服してから再開するかのう。
ほれ一緒にコーヒーブレイクじゃ。


困った顔のぷうさん

うう、終わってはくれないんだ…。

その五 二次元配列へ

四日目 文字列について 目次

三日目へ

ぷうさんの七日間戦争 四日目

五日目へ