【C语言】有关数组转置与指针应用的题目,求大佬解答

编写函数实现矩阵(4行4列)的转置。要求函数的实参为数组名,形参为指针形式。

#include <stdio.h>
void fun(int (*p1)[4],int (*p2)[4]);
int main()
{
    int p1[4][4]={0} ,p2[4][4] = {0};//{7,8,9,1},{4,5,6,1},{1,2,4,1},{1,1,1,1}};
    
    int i = 0, j = 0;

    for(i = 0;i < 4;i++){
        for(j = 0;j < 4;j++){
            scanf("%d",&p2[i][j]);
        }
    }    
//    printf("输入一个4*4矩阵:\n");
//    scanf("%d",p2);
    fun(p1,p2);
    for(i = 0;i < 4;i++){
        for(j = 0;j < 4;j++){
            printf("%d ",*(*(p1+i)+j));    
        }
        printf("\n");
    }        
    

    return 0;
}
void fun(int (*p1)[4],int (*p2)[4])
{
    int i = 0,j = 0;

    for(i = 0;i < 4;i++){
        for(j = 0;j < 4;j++){
            
            *(p1[j]+i) = *(p2[i]+j);
        }
    }
}

http://www.docin.com/p-1622966839.html

 #include<stdio.h>
void trans(int (*a)[4]) {
    int tmp;
    for (int i = 0; i < 3; i++) {
        for (int j = i+1; j < 4; j++) {
            tmp = a[i][j];
            a[i][j] = a[j][i];
            a[j][i] = tmp;
        }
    }
}
int main() {
    int a[4][4] = {
    {1,2,3,4},
    {5,6,7,8},
    {1,1,1,1},
    {2,2,2,2}
    };
    trans(a);
    for (int i = 0; i < 4; i++) {
        for (int j = 0; j < 4; j++) {
            printf("%d ", a[i][j]);
        }
        printf("\n");
    }
    return 0;
}