Rso's Jotter

日々の開発の知見のメモやその他雑記

配列のお話

C言語では1次元配列も2次元配列(正確に言うと配列の配列)も実際の
メモリイメージは同じである.要はプログラマコンパイラ
どう認識しているかというだけの違いである.


次のプログラムの上の部分ではpとppは同じ場所を指しているが,アクセス方法が違う.
逆に下の部分では,2次元配列を1次元配列と見なしてアクセスしている.


要するに2次元配列とかややこしーとか思ってる人は1次元配列として
つかっちまえっちゅうことですわ

#include<stdio.h>
#include<stdlib.h>

int main()
{

	int* p;	//intへのポインタ
	int (*pp)[10];	//長さ10のint配列へのポインタ
	int a[10][10];	//2次元配列(配列の配列)
	int i=0;

	p = malloc(sizeof(int)*100);	//intを100個分確保

	for(i=0;i<100;i++)	//普通に初期化
	{
		p[i] = i;
	}
	pp = (int (*)[10])p;	//今から2次元配列として使いたい
	printf("%d %d ",p[33],pp[3][3]);	//ppは2次元配列としてアクセスできる

	free(p);
	//-----2次元配列をただの配列として使う------------
	p = (int*)a;
	for(i=0;i<100;i++)
	{
		p[i] = i;
	}
	printf("%d",p[33]);
}