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