一个例子弄明白C语言动态多维数组的创建,存储,引用及降维操作;

标签:
c语言it |
分类: 010101 |
在C语言编写过程中,最麻烦的莫过于对数组的操作,通用编程可能还感觉不到,像我这种做科学计算经常要处理高维数组,刚开始的编程时候简直是个悲剧。C语言函数还不支持直接传递高维数组,一度很打击我对这种高效的语言的兴趣。
在网上搜了一些例子,也看了一些书,发现很多人都不推荐使用高维数组((╯‵□′)╯︵┻━┻),个别的讲到的,也一直在讲理论,(“一个二维指针数组中的指针指向二维数组print出来结果是什么”(╯‵□′)╯︵┻━┻口胡谁想知道这个啊!)。
在这里我用一个例子简单展示高维数组的常见操作,我给的例子是三维的,实际上可以类推到更高维度。
对于我而言经常需要进行的操作是:
1)创建可变高维数组;
2)传递高维数组;
3)降维,输出高维数组中低维度的一部分;
这几个操作在这个例子里都能清晰地看见。
# include
<stdio.h>
void print3Dmatrix(int ***D3_num,int
n,int m, int l) //以***D3_num形式将D3_num的首地址传入
{
int
i,ii,iii;
printf("\n3D
matrix is: \n");
for
(i=0;i<</font>n;i++){
printf("[]\n",i);
for
(ii=0;ii<</font>m;ii++){
for
(iii=0;iii<</font>l;iii++){
printf("%.3d
",D3_num[i][ii][iii]);
}
printf("\n");
}
}
}
int **D3ToD2(int ***D3_num) //int
**表示返回的是一个二级指针
{
int
**D2_num;
D2_num=D3_num[0];//D3_num是一个三级指针,D3num[0]是一个二级指针,D3num[0][0]是一个一级指针
return
D2_num;
}
void print2Dmatrix(int **D2_num,int m, int l)
{
int
ii,iii;
printf("\n2D
matrix is:\n");
for
(ii=0;ii<</font>m;ii++){
for
(iii=0;iii<</font>l;iii++){
printf("%.3d
",D2_num[ii][iii]);
}
printf("\n");
}
}
int main()
{
int
i,ii,iii;//初始化参数
int
n=2,m=3,l=4; //三维数组长度
int
***D3_num; //声明一个三级指针
D3_num=(int***)malloc(n*sizeof(int**)); //分配空间,该三级指针指向n个二级指针
for
(i=0;i<</font>n;i++){
D3_num[i]=(int**)malloc(m*sizeof(int*));//分配空间,每个二级指针又指向m个一级指针
for
(ii=0;ii<</font>m;ii++){