C言語/配列とポインタ

出典: フリー教科書『ウィキブックス(Wikibooks)』
ナビゲーションに移動 検索に移動

テンプレート:正確性

配列とポインタの基本[編集]

配列とポインタには密接な関係がある。

式の中では、配列は「その先頭要素へのポインタ」に読み替えられる。

また、p[i]は*(p+i)の簡便記法である。

[1]

1次元配列を指すポインタ[編集]

次の例のように、 ポインタに配列のメモリアドレスを代入して、 ポインタ演算によって配列にアクセスすることができる。

//例 1次元の配列を指すポインタの使用例
#include <stdio.h>

int main(void)
{
	int a[10]={2,3,5,7,11,13,17,19,23,29};
	int *pa;
	pa=a;//ポインタpaに配列aの先頭のメモリアドレスを代入する。
	for(int i=0; i<10; ++i)
		printf("%d ", a[i]);//配列aの内容を表示する。
	printf("\n");
	for(int i=0; i<10; ++i)
		printf("%d ", *(pa+i));//ポインタpaを使って配列aの内容を表示する。
}

多次元配列を指すポインタ[編集]

多次元配列を指すポインタを使う時は、 配列の領域がメモリ上にどう確保されるか意識する必要がある。 例えば3行4列の2次元配列のy行x列にポインタを使ってアクセスするには、 次のように記述する。

*(ポインタの識別子+y*4+x)
//例 2次元の配列を指すポインタの使用例
#include <stdio.h>

int main(void)
{
	int a[3][4]={
		0,1,2,3,
		4,5,6,7,
		8,9,10,11
		};
	int *pa;
	pa=a[0];

//配列aの内容を表示する。
	for(int y=0; y<3; ++y)
	{
		for(int x=0; x<4; ++x)
		{
			printf("%2d ", a[y][x]);
		}
		printf("\n");
	}

//ポインタpaを使って配列aの内容を表示する。
	for(int y=0; y<3; ++y)
	{
		for(int x=0; x<4; ++x)
		{
			printf("%2d ", *(pa+(y*4)+x));
		}
		printf("\n");
	}

}

脚注[編集]

  1. ^ 前橋和弥著『C言語 ポインタ完全制覇』p.061 平成13年6月25日初版第4刷発行

参考文献[編集]

  • 前橋和弥著『C言語 ポインタ完全制覇』平成13年6月25日初版第4刷発行