目次
配列のアドレス
ポインタやメモリといった観点から配列を見ていきましょう。
配列は指定した要素数分の領域を連続に確保します。
つまりint型(4バイト)の配列array[]は以下のようになります。
| アドレス | 0x00 | 0x01 | 0x02 | 0x03 | 0x04 | 0x05 | 0x06 | 0x07 |
| 内容 | array[0] | array[1] | ||||||
先頭から4バイトが[0]、次の4バイトが[1]…となります。
この「連続」というのがポイントです。
以下のプログラムを実行してみてください。
pointer_array_sample1.c
#include <stdio.h>
int main(void)
{
int arr[] = {1, 4, 8, 5};
int *p_arr = arr;
printf("%d\n", *(arr));
printf("%d\n", *(p_arr));
printf("%d\n", *(arr + 1));
printf("%d\n", *(p_arr + 2));
return 0;
}
[]を使わなくても配列の中身が参照できます。
このことからもわかる通り、配列名は配列の先頭のアドレスを保持しています。
pointer_array_sample2.c
#include <stdio.h>
int main(void)
{
int arr[] = {1, 4, 8, 5};
int *p_arr = arr;
printf("%p\n", arr);
printf("%p\n", p_arr);
return 0;
}