C语言指针问题,输入一个指针矩阵到函数,然后在函数内部创建一个新的指针矩阵,赋值输出,为何输不出来?

# include<stdio.h>

int creat(int (*p3)[2])
{
int (*p4)[2];
int b[2][2]={0};
int i,j;
p4=b;
for(i=0;i<2;i++)
{
for(j=0;j<2;j++)
{ *(*(p4+i)+j)=*(*(p3+i)+i);
}
}
return p4;
}

void main()
{ int a[2][2]={{1,2},{3,4}};
int (*p1)[2];
int (*p2)[2];
int i,j;
p1=a;

p2=creat(p1);

for(i=0;i<2;i++)
{
for(j=0;j<2;j++)
{ printf("%d",*(*(p2+i)+j));
}
}
}

首先creat子程就有错误:返回值时不能返回局部变量,但可以返回动态创建的数组;返回值类型错误;
你其实目的是矩阵转置是吧,可以把Create函数不用返回值的,只修改其内容即可比如:
void creat(int (*p3)[2])
{
int i,j,tmp;
for(i=0;i<2;i++)
{
for(j=0;j<2;j++)
{
tmp=*(*(p3+i)+j);
*(*(p3+i)+j)=*(*(p3+i)+i);
*(*(p3+i)+i)=tmp;
}
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-03-01
create() 的函数返回值类型错误了吧
第2个回答  2011-03-01
#include <stdio.h>
#include <stdlib.h>//使用malloc用的库函数
typedef int (*P)[2];//定义类型
P creat(int (*p3)[2])//返回类型为数组指针
{
int (*p4)[2];
//int b[2][2]={0};
int i,j;
//p4=b;
//申请内存,这样在函数结束后,能保存数值
p4=(int(*)[2])malloc(sizeof(int*)*2);
for(i=0;i<2;i++)
for(j=0;j<2;j++)
*(*(p4+i)+j)=*(*(p3+i)+j);//如果就一条执行语句,2个for循环不用{}

return p4;
}

void main()
{ int a[2][2]={{1,2},{3,4}};
int (*p1)[2];
int (*p2)[2];
int i,j;
p1=a;
p2=creat(p1);

for(i=0;i<2;i++)
for(j=0;j<2;j++)
printf("%d ",*(*(p2+i)+j));

}
第3个回答  2011-03-01
应该是返回值的问题……
第4个回答  2011-03-05
int main()
{
int i,j,a[3][5],b[5][3];

//..
for(i=0;i<3;i++)
for(j=0;j<5;j++)
scanf("%d",&a[i][j]);

//..
for(i=0;i<5;i++)
for(j=0;j<3;j++)
b[i][j]=a[j][i];

//..
for(i=0;i<5;i++)
{
for(j=0;j<3;j++)
printf("%d ",b[i][j]);
printf("\n");
}
return 0;
}