目次
配列のアドレス
ポインタやメモリといった観点から配列を見ていきましょう。
配列は指定した要素数分の領域を連続に確保します。
つまり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; }