为什么我无法实现调用函数来转置?输出的仍然是原来的矩阵


#include<stdio.h>
int array[3][3];
int main()
{
    int i,j;
    void zhuanzhi(int array[][3]);
    printf("输入你要转置的矩阵\n");
    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
        {
            scanf("%d",&array[i][j]);
        }
    }
    printf("您输入的矩阵为\n");
    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
        
            printf("%3d",array[i][j]);
            printf("\n");
    }
    printf("转置后的矩阵为\n");
    zhuanzhi(array);
    for(i=0;i<3;i++)
        {for(j=0;j<3;j++)
            printf("%3d",array[i][j]);
            printf("\n");
        }
}
void zhuanzhi(int array[][3])
{
    int i,j,t;
    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
        {
            t=array[i][j];
            array[i][j]=array[j][i];
            array[j][i]=t;
        }
    }
   
}
void zhuanzhi(int array[][3])
{
    int i,j,t;
    for(i=0;i<3;i++)
    {
        for(j=i;j<3;j++)  //这里从i开始换,不然换过来后又换回去了
        {
            t=array[i][j];
            array[i][j]=array[j][i];
            array[j][i]=t;
        }
    }
}

举个例子你就知道了,
假设i = 1,j=2,按照你的逻辑,t = array[1][2]; array[1][2] = array[2][1]; array[2][1] = t;
那么当i=2,j=1时,t = array[2][1];array[2][1] = array[1][2]; array[1][2] = t;
发现了吗,又换回去了。所以实现转置矩阵的时候,需要用一个b[3][3]来暂存数据,否则前面转的数据就又转回去了。


#include<stdio.h>
int array[3][3];
int main()
{
    int i,j;
    void zhuanzhi(int array[][3]);
    printf("输入你要转置的矩阵\n");
    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
        {
            scanf("%d",&array[i][j]);
        }
    }
    printf("您输入的矩阵为\n");
    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
            printf("%3d",array[i][j]);
        printf("\n");
    }
    printf("转置后的矩阵为\n");
    zhuanzhi(array);
    for(i=0;i<3;i++)
    {for(j=0;j<3;j++)
    printf("%3d",array[i][j]);
    printf("\n");
    }
}
void zhuanzhi(int array[][3])
{
    int i,j,t;
    for(i=0;i<3;i++)
    {
        for(j=i;j<3;j++)  //这里从i开始换
        {
            t=array[i][j];
            array[i][j]=array[j][i];
            array[j][i]=t;
        }
    }
}