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 好的 谢谢你