C/C++

ポインタと配列

更新日:

配列のアドレス

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

配列は指定した要素数分の領域を連続に確保します。
つまり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;
}



-C/C++

Copyright© C言語/C++入門講座  ツナサーモン , 2019 All Rights Reserved Powered by AFFINGER5.