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

プロフィール

編集者NT

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

よろしくお願いします。

最新コメント

0 コメント

第35回 メモリ4

第35回 メモリ4

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

<ソースコード>

#include <stdio.h>

void main()
{
  int i, b;
  int *c;
  int 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 で、アドレスは 6553072 です
変数 a[5]は 5 で、アドレスは 6553072 です
変数 a[7]は 7 で、アドレスは 6553080 です

が表示されたはずです。
まず、7行目の変数が前回の<ソースコード>で使った char型から int型に
変わったことに注目しましょう。
18行目でcのアドレスを2足してみましょう。
単純に考えると6553072+2ですから6553074のアドレス番号を表示する思われた
方もいるのではないでしょうか?
しかし、アドレスは 6553080 になっています。
これは、18行目では、int型の大きさを加算していると考えます。
int型の大きさは4バイトでした。従って、4バイトを2個分足していますよ。
という意味になりますね。
式を言葉で書くと、
 コンピュータが決めたアドレス+(型の大きさ×数字)
計算すると
 6553072+(4x2)で 6553080です。
char型の場合は、大きさが1バイトでしたので1バイト2個分でアドレスが
計算すると
 6553072+(1x2)で 6553074です。
ですね。

今回もポインタ変数に触れましたが、少し難しいなと思われた方は
float型やdouble型についてもやってみてください。この計算方法が明確になる
でしょう。理解せず後回しにすると、C言語のポインタ計算は、複雑なプログラム
を考える時、時間がかかってしまいます。
次回もこれを使ってメモリについて説明します。

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



コメント

非公開コメント