关于#c语言#的问题:2) 不允许使用数组下标访问数组元素或为数组元素赋值

声明一个3×2的二维整型数组arr,其数组元素通过控制台输入。输出输入的数组,转置,输出转置后的数组。要求:1) 声明一个以指向数组行的指针变量为参数的函数并在main函数中调用,该函数把arr中的元素转置;2) 不允许使用数组下标访问数组元素或为数组元素赋值。


#include<stdio.h>
#define M 10
#define N 10
void Transpose(int (*a)[N], int (*at)[M], int m, int n);
void InputMatrix(int (*a)[N], int m, int n);
void PrintMatrix(int (*at)[M], int n, int m);
int main()
{
    int s[M][N],st[N][M],m,n;// 1 2 3 4 5 6 7 8 9
    printf("Input m, n:");
    scanf("%d %d",&m,&n);
    InputMatrix(s,m,n);
    Transpose(s,st,m,n);
    printf("The transposed matrix is:\n");
    PrintMatrix(st,n,m);
    return 0;
}
void Transpose(int (*a)[N], int (*at)[M], int m, int n)
{
    int i,j;
    for(i=0; i<m; i++)
        for(j=0; j<n; j++)
            *(*(at+j)+i)=*(*(a+i)+j);
}
void InputMatrix(int (*a)[N], int m, int n)
{
    int i,j;
    printf("Input %d*%d matrix:\n",m,n);
    for(i=0; i<m; i++)
        for(j=0; j<n; j++)
            scanf("%d",*(a+i)+j);
}
void PrintMatrix(int (*at)[M], int n, int m)
{
    int i,j;
    for(i=0; i<n; i++)
    {
        for(j=0; j<m; j++)
            printf("%3d",*(*(at+i)+j));
        printf("\n");
    }
}

img

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632