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]);
}