注册 登录
编程论坛 C语言论坛

新手题 指针倒置3*3矩阵 有大佬看看么?

qq14 发布于 2020-12-27 10:40, 1569 次点击
输入1 2 3 4 5 6 7 8 9 输出:
1 4 7            但我输出了  1 4 7
2 5 8                        4 5 8
3 6 9                        7 8 9
太奇怪了吧,有没有大佬能告诉我那一步做错了和原因呢?


#include <stdio.h>
#include <stdlib.h>
void  Fun(int *p);
int main()
{
    int x[3][3];
    for(int i=0;i<3;i++)
    {
        for(int j=0;j<3;j++)
        {
            scanf("%d",&x[i][j]);
        }
    }
    int *p;
    p=(int *)x;
    Fun(p);
    for(int n=0;n<3;n++)
    {
        for(int m=0;m<3;m++)
        {
            printf("%d ",x[n][m]);
        }
        printf("\n");
    }
    return 0;
}
void  Fun(int *p)
{
    for(int i=0;i<3;i++)
    {
        for(int j=0;j<3;j++)
        {
            *(p+3*i+j)=*(p+3*j+i);
        }
    }
}

3 回复
#2
do8do8do82020-12-27 11:44
一边修改数组元素,一边倒置,那会被覆盖的
得有个数据交换过程   

要不你弄另一个数组做备胎int  y[3][3]

 for(i=0;i<3;i++)
     for(j=0;j<3;j++)
            y[i][j]=x[j][i];

y就是x的倒置
#3
qq142020-12-27 18:56
回复 2楼 do8do8do8
我听了你说的话,弄了一个有y[3][3],和指向它的指针t来搞,可以运行了!!!!我都没想到这方面的哈哈,谢谢大佬
#4
qq142020-12-27 20:22
回复 2楼 do8do8do8
我能不能问下你下面这个呀?明明用刚刚做的那样可以的结果又出现了这样的问题
输入行数、列数和数倒置矩阵如 3 2 1 2 3 4 5 6 需输出
1 3 5      我得到1 4 2
2 4 6            5 3 6
代码在下边,如果哦如果有空的话,你能告诉下我么?

#include <stdio.h>
#include <stdlib.h>
void Fun(int *p,int *t,int n,int m);
int main()
{
    int n,m;
    scanf("%d %d",&n,&m);
    int x[n][m],y[m][n];
    int *p;
    p=(int *)x;
    int *t;
    t=(int *)y;
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            scanf("%d",&x[i][j]);
        }
    }
    Fun(p,t,n,m);
    for(int a=0;a<m;a++)
    {
        for(int b=0;b<n;b++)
        {
            printf("%d\t",y[a][b]);
        }
        printf("\n");
    }
    return 0;
}
void Fun(int *p,int *t,int m,int n)
{
    for(int i=0;i<m;i++)
    {
        for(int j=0;j<n;j++)
        {
            *(t+n*i+j)=*(p+m*j+i);
        }
    }
}
1