ポインタと配列

目次

配列のアドレス

ポインタやメモリといった観点から配列を見ていきましょう。

配列は指定した要素数分の領域を連続に確保します。
つまりint型(4バイト)の配列array[]は以下のようになります。

アドレス 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07
内容 array[0] array[1]

先頭から4バイトが[0]、次の4バイトが[1]…となります。

この「連続」というのがポイントです。
以下のプログラムを実行してみてください。

#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;
}

[]を使わなくても配列の中身が参照できます。
このことからもわかる通り、配列名は配列の先頭のアドレスを保持しています。

#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;
}



コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です