数组与指针的问题
前面4各数顺序向后移4个位置,最后4个数变成最前面的4个数#include<stdio.h>
#define n 8
void main()
{
int a[n];
// int b[n];
int *p;
int *s1,*s2;
int i,j,m;
for(i=0;i<n;i++)
scanf("%d",&a[i]);
p=a;
printf("please input the m:\n");//当m=4时
scanf("%d",&m);
s1=p;
s2=(p+n-m);
printf("%d\n",*s2);
for(i=n-m;i<n;i++)
a[i]=*s1++;
for(i=n-m;i<n;i++)
printf("%d ",a[i]);
printf("\n");
for(j=0;j<m;j++)
a[j]=*s2++;
for(j=0;j<m;j++)
printf("%d ",a[j]);
printf("\n");
for(i=0;i<n;i++)
printf("%d ",a[i]);
printf("\n");
}
当m=4时这个程序,为什么是错的,而把数组改成#include<stdio.h>
#define n 8
void main()
{
int a[n];
int b[n];
int *p;
int *s1,*s2;
int i,j,m;
for(i=0;i<n;i++)
scanf("%d",&a[i]);
p=a;
printf("please input the m:\n");
scanf("%d",&m);
s1=p;
s2=(p+n-m);
printf("%d\n",*s2);
for(i=n-m;i<n;i++)
b[i]=*s1++;
for(i=n-m;i<n;i++)
printf("%d ",b[i]);
printf("\n");
for(j=0;j<m;j++)
b[j]=*s2++;
for(j=0;j<m;j++)
printf("%d ",b[j]);
printf("\n");
for(i=0;i<n;i++)
printf("%d ",b[i]);
printf("\n");
}
就可以了,为什么?