#include
void MatrixAllocate(int x,int y,int p)
{
int i;
p=new int*[x]; //这里动态分配一维指针的内存空间,并把这一组一维指针的首地址赋给二维指针p
if(p==NULL)printf("error1\n");
for(i=0;i<x;i++)
{
p[i]=new int[y]; //再利用new分配一个一维数组,并且把其首地址赋给这一组一维指针
if(p[i]==NULL)printf("error2\n");
}
}
void input(int x,int y,intp,int**pb1)
{
int i,j;
pb1=p;
for(i=0;i<x;i++)
{
for(j=0;j<y;j++)
{
printf("ok\n");
scanf("%d",&p[i][j]); //不知道为什么运行到这就出错
}
}
}
void MatrixTranspose(int x,int y,int**p1,int**p2,int**pb2,void(*p3)(int,int,int**))
{
int i,j;
(*p3)(y,x,p2);
pb2=p2;
for(i=0;i<x;i++)
{
for(j=0;j<y;j++)
{
p2[j][i]=p1[i][j];
}
}
}
void MatrixPrint(int x,int y,int**p)
{
int i,j;
for(i=0;i<y;i++)
{
for(j=0;j<x;j++)
{
printf("%d",&p[i][j]);
}
printf("\n");
}
}
void ReleaseMatrix(int x,int y,int**p1,int**p2)
{
int i;
for(i=0;i<x;i++)
{
delete[]p1[i];
}
delete[]p1;
for(i=0;i<y;i++)
{
delete[]p2[i];
}
delete[]p2;
}
int main()
{
int m,n,**pMatrix,**pMatrix1,**pcp1,**pcp2;
void(*pMA)(int,int,int**)=MatrixAllocate;
puts("请指定矩阵行列数:");
printf("行数 m=");
scanf("%d",&m);
printf("列数 n=");
scanf("%d",&n);
puts("创建矩阵空间");
MatrixAllocate(m,n,pMatrix);
puts("给矩阵录入数据");
input(m,n,pMatrix,pcp1);
puts("开始矩阵转置操作");
MatrixTranspose(m,n,pMatrix,pMatrix1,pcp2,MatrixAllocate);
puts("输出转置后的矩阵");
MatrixPrint(m,n,pMatrix1);
puts("释放矩阵空间,并结束应用程序");
ReleaseMatrix(m,n,pcp1,pcp2);
return 0;
}
p明明是int型的…p=new int*[x];这句编译不过的吧
还有csdn是可以插入代码片的 就那个</>的符号 直接复制会失去格式和一些内容的
谢谢楼上的回答,不过的确是我代码直接复制少了很多东西,子函数形参变量p定义的是二级指针,我当时编译通过,主要是运行到录入数据出错,我知道怎么回事了,是因为子函数形参变量p的改变不会影响实参变量pMatrix的改变,那我把他的地址传给子函数,子函数用三级指针去接收是不是就可以了?