C言語で簡単なプログラムを作ります。

プロフィール

編集者NT

Author:編集者NT
編集者NTといいます。プログラミングなどのブログ、メールマガジンを書いています。

よろしくお願いします。

最新コメント

0 コメント

第34回 メモリ3

 第34回 メモリ3 

今回も、C言語で使うメモリについて説明していきます。
では、ソースコードを見てください。

<ソースコード>

#include <stdio.h>

void main()
{
  int i, b;
  char *c;
  char a[8];

  for ( i=7; i>=0; i-- )
    a[i] = i;

  b = 5;
  printf( "変数 a[%d]は %d で、アドレスは %d です\n", b, a[b], &a[b] );

  c = &a[b];
  printf( "変数 a[%d]は %d で、アドレスは %d です\n", *c, *c, c );

  c = c+2;
  printf( "変数 a[%d]は %d で、アドレスは %d です\n", *c, *c, c );

}


早速、コンパイルして実行してみましょう。
結果は、

変数 a[5]は 5 で、アドレスは 6553081 です
変数 a[5]は 5 で、アドレスは 6553081 です
変数 a[7]は 7 で、アドレスは 6553083 です

が表示されたはずです。
まず、13行目をみてみましょう。配列変数aの5番目を見ていますね。
既に10行目で配列変数a に0から7の数値を順番に代入していますので
5が表示されています。アドレスはコンピュータが決めますのでメモリが
空いている場所へ代入しその場所のアドレス番号を表示しています。
今回のアドレス番号は6553081 でした。これを6行目のポインタと呼ばれる
変数で定義している *cへ代入しています。cの左の*(アスタリスク)は
ポインタであることを示しています。15行目のようにcとして使い、
配列変数a[5]のアドレスを代入することで16行目でそのアドレスの中身を
*cで表示することが可能です。
試しに18行目でcのアドレスを2増やしてみました。
6553081+2ですから6553083のアドレス番号の内容を19行目で表示してます。
少し難しいように感じますが、これは非常に便利なものです。
なぜかというと、メモリの内容を変えたり移動することなく、その位置や内容
を指し示す変数があると、効率がよく高速なプログラム作成も可能になります。
例えば、動画や音楽編集するなどの数Mバイトのメモリを使うプログラムを考え
ると、メモリ内では、データの1部コピー、1部削除、追加など簡単に行えま
す。
今回はポインタ変数に触れました。
次回もこれを使ってメモリについて説明します。

それでは、次回をお楽しみに。
スポンサーサイト



コメント

非公開コメント