关于动态数组的创建与函数调用
#include<stdio.h>
#include<stdlib.h>
void Move2DArray(int ***a,int row,int col)
{
int i;
*a=(int *)malloc(row*sizeof(int));
for(i=0;i<col;i++)
{
a[i]=(int *)malloc(col*sizeof(int));
}
}
void KK(int ***a,int row,int col)
{
int i,j;
for(i=0;i<row;i++)
for(j=0;j<col;j++)
{
a[i][j]=i+j;
printf("%d",a[i][j]);
}
}
void main()
{
int row=5,col=5, **a;
Move2DArray(&a,row,col);
KK(&a,row,col); getch();
}
———————————————————————————————————————————————————————
#include<stdio.h>
#include<stdlib.h>
#define MaxSize 100
typedef int ElemType;
typedef struct{
int row;
int col;
ElemType e;
}Trpie;
typedef struct{
Trpie data[MaxSize];
int rows;
int cols;
int nums;
}table;
void Move2DArray(int ***a,int row,int col)
{
int i;
*a=(int *)malloc(row*sizeof(int));
for(i=0;i<col;i++)
{
a[i]=(int *)malloc(col*sizeof(int));
}
}
void Creat(table *t,int ***a,int row,int col)
{
int i,j;
t->rows=row;
t->cols=col;
t->nums=0;
for(i=0;i<row;i++)
{
for(j=0;j<col;j++)
{
if(a[i][j]!=0)
{
t->nums++;
t->data[t->nums].row=i+1;
t->data[t->nums].col=j+1;
t->data[t->nums].e=a[i][j];
}
}
}
}
void dispt(table t)
{
int i;
if(t.nums<=0)
return ;
for(i=1;i<=t.nums;i++)
printf("%4d%4d%4d\n",t.data[i].row,t.data[i].col,t.data[i].e);
}
void main()
{
table t,q;
int row=3,col=4, **a,i,j;
Move2DArray(&a,row,col);
for(i=0;i<row;i++)
for(j=0;j<col;j++)
{
a[i][j]=i+j;
printf("%d\n",a[i][j]);
}
Creat(&t,&a,row,col); dispt(t);
getch();
}
看标了颜色的部分,对于动态建立数组的实质不懂,还有调用过程的变量传递不懂,望高手指教!谢谢!
[解决办法]
感觉你把那个3级指针改掉,会靠谱得多。
到目前为止,二级指针我只用过不超过5次,三级指针根本没碰过。
[解决办法]
void fun(int ***p, int m, int n){ *p = (int**)malloc(sizeof(int*)*m); for (int i=0; i<m; ++i) (*p)[i] = (int*)malloc(sizeof(int)*n);}int **arr = NULL; fun(&arr, 2, 3);