输出蛇形数阵
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
int **p;
int n,i,x,y;
scanf("%d",&n);
p=(int**)malloc(n*sizeof(int*));
for(i=0;i<=n-1;i++)
{
p[i]=(int*)malloc(n*sizeof(int));
}
memset(p,0,sizeof(p));
i=p[x=0][y=n-1]=1;//此处提示访问违例
while(i<=n*n)
{
while((x+1)<=n-1 && !p[x+1][y]) p[++x][y]=++i;
while((y-1)<=0 && !p[x][y-1]) p[x][--y]=++i;
while((x-1)<=0 && !p[x-1][y]) p[--x][y]=++i;
while((y+1)<=n-1 && !p[x][y+1]) p[x][++y]=++i;
}
for(x=0;x<=n-1;x++)
{
for(y=0;y<=n-1;y++) printf("%3d",p[x][y]);
printf("\n");
}
free(p);
system("pause");
return 0;
}
为什么出错?
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
int **p;
int n,i,x,y;
scanf("%d",&n);
p=(int**)malloc(n*sizeof(int*));
for(i=0;i<=n-1;i++)
{
p[i]=(int*)malloc(n*sizeof(int));
}
memset(p,0,sizeof(p));
i=p[x=0][y=n-1]=1;//此处提示访问违例
while(i<=n*n)
{
while((x+1)<=n-1 && !p[x+1][y]) p[++x][y]=++i;
while((y-1)<=0 && !p[x][y-1]) p[x][--y]=++i;
while((x-1)<=0 && !p[x-1][y]) p[--x][y]=++i;
while((y+1)<=n-1 && !p[x][y+1]) p[x][++y]=++i;
}
for(x=0;x<=n-1;x++)
{
for(y=0;y<=n-1;y++) printf("%3d",p[x][y]);
printf("\n");
}
free(p);
system("pause");
return 0;
}
为什么出错?