ポインタ配列と配列ポインタ-----C++学習ノート


質問元:動的割り当てメモリで多次元配列を動的に作成する場合、例えばnew int[3][4][5]では、私たちのnewオペレータはメモリ空間のヘッダアドレスを新たに割り当てるポインタを返しますが、このポインタはint型のポインタではなくint配列のポインタです.このint配列要素の個数は(左端の1次元を除く各次元の下付き数式の積)<----(C++プログラム設計第4版清華出版社).
つまり、次のようになります.
int (*p)[4][5];
p=new int[3][4][5];
ですが、次はできません.
int *p;
p=new int[3][4][5];

上からint配列ポインタを末尾まで返すということに対して、new int[3][4][5]を例にとると、返されるint型配列のポインタは、その配列要素の個数が20個なので、(*p)[4][5]と書くのは明らかですが、(*p)[5][4]と書くことができるかどうかは、要素の個数だけ対応すればよいのではないでしょうか.それとも1次元あたりの個数に対応しますか?私たちはまたVS 2010でテストをします.
その結果,配列要素の個数だけでなく,次元数も対応することが分かった.
ポインタ配列:
int *p[3];//      ,        int    
int *p[3][4];//      ,        int    ??

配列のポインタ:
int a[3];//    
int aa[3][4];//    
int aaa[3][4][5];//    
int *p=a;//       
int (*pp)[4]=aa;//       
int (*ppp)[4][5]=aaa;//       

 
ポインタでセルグループ要素にアクセスするフォーマットは、1次元:*(p+i);2 D:*(*(pp+i)+j);3 D:*(*(ppp+i)+j)+k)、順に類推します.