#include
void ZH()
{
int a[3][4];
int n,m;
printf("原矩阵是:\n");
for(n=0;n<3;n++)
{
for(m=0;m<4;m++)
{
printf("a[%d][%d]=",n,m);
scanf("%d\n",&a[n][m]);
}
}
for(n=0;n<3;n++)
{
for(m=0;m<4;m++)
{
a[m][n]=a[n][m];
}
}
printf("变换后的矩阵是:");
printf("%d",a[m][n]);
if(n%2==0)printf("\n");
}
void main()
{
ZH();
}
你要明白:内存里面是没有所谓2维数组的说法的,它永远是一维的,二维你你逻辑自己定义的。
比如你定义int a[4][3],b[3][4],a和b占用的内存永远是连续的12个int的一维空间。
不知道这么说你能不能明白。
int a[3][4];
你定义的数组太小了,转置后放不下,起码定义一个4x4的才行。
另外,转置的过程中用同一个数组?数据不会被覆盖造成错乱吗?
a[m][n]=a[n][m];
->
int t = a[m][n];
a[m][n]=a[n][m];
a[n][m] = t;
a[m][n]=a[n][m]; 这句是错的 你想想a[3][4]=a[4][3]; 有a[4][3]吗?
再考虑考虑
建议你使用临时变量来交换a[m][n]与a[n][m]的值,不然不能得到正确结果。