有人帮忙吗,我是用指针做的

P1319 压缩技术

l763447370 @ 2022-11-05 20:40:38

问题:这样做出来,第一行是没问题的,但从第二行开始就输出了乱码。 二维数组不是相当于一行连续的一维数组吗。那按道理指针加1再赋值就能让所有数都赋值了吗。 求大佬指教,可能是我指针的知识不扎实

//P1319 压缩技术
//题意
//输入第一个数 表示矩阵大小
//接下来每一个数表示连续的 0 1 0 1的多少
//思路
//二维数组为连续的地址,则每加入一个 指针加一
//死循环输入每次输入且循环后都要判断一下相加是不是等于n*n了 等于就停止
//输入的为循环的次数,区分单双数 单数时添加0  双数添加1
#include<stdio.h>
int main()
{
    int n, m = 0,s=1,x=0,multiplication=0; scanf("%d",&n) ;
    int arr[200][200];
    int* p = arr;//表示首元素地址
    multiplication = n * n;
    while (multiplication -=m)
    {

        scanf("%d",&m);
        for (int i = 0; i < m; i++)
        {
            if (s % 2 == 1)
            {
                *(p + x) = 0; //在指针中 无视二维数组
            }
            else if (s % 2 == 0)
            {
                *(p + x) = 1;
            }
            x++;
        }
        s++; //表示第几个输入,要输入0还是1
    }
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            printf("%d", arr[i][j]);
            if (j == (n - 1))
            {
                printf("\n");
            }
        }
    }
    return 0;
}

by Ruiqun2009 @ 2022-11-05 20:49:56

@l763447370 当然不行,你这样做是改变指针地址


by l763447370 @ 2022-11-07 16:35:49

@Ruiqun2009 好的 谢谢你


|