由于数组在内存里是线性排列的,只要改变指针就可以改变其访问方式,因为指针不仅仅是地址最重要的是步长,其类型确定其内存的解析方式,因此我们可以通过改变其指针类型改变内存的访问方式。
#include<stdio.h>
#include<stdlib.h>
void main()
{
int i,j,k;
int *p=(int *)malloc(sizeof(int)*40);// 一个一维数组,其在内存是线性的
int (*pp)[8]; //数组指针
int (*ppp)[4][5];//
pp=(int (*)[8])p; //以[5][8] 二维数组访问;
ppp=(int (*)[4][5])p;//以[2][4][5] 三维数组访问;
for(i=0;i<40;i++)
{
p[i]=i;
}
printf("二维数组访问:\n");
for(i=0;i<5;i++)
{
for(j=0;j<8;j++)
{
printf("%5d",pp[i][j]);
}
printf("\n");
}
printf("\n");
printf("三维数组访问:\n");
for(i=0;i<2;i++)
{
for(j=0;j<4;j++)
{
for(k=0;k<5;k++)
{
printf("%5d",ppp[i][j][k]);
}
printf("\n");
}
printf("\n");
}
getchar();
}