为什么打印错误,会重复前面的打印

有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面m个数
include<stdio.h>
#include<stdlib.h>

#if(1)
void move(int *p,int n,int m)//n为元素后移位置,m为元素个数
{

int *p1;
int i;
for(i=0,p1=p;p1<p+n;p1++,i++)
{
    *p1=*(p+m-n+i);
}
for(i=0,p1=p+n;p1<p+m;p1++,i++)
{
    *p1=*(p+i);
}
for(i=m;i>0;i--)
{

    printf("%-2d",*(p1-i));
}

}

void main()
{
int i,n,m;
int c[100];
printf("请输入后移个数:\n");
scanf("%d",&n);
printf("请输入元素个数:\n");
scanf("%d",&m);
printf("请输入任意元素:\n");
for(i=0;i<m;i++)
{
scanf("%d",c+i);
}
move(c,n,m);
printf("\n");
system("pause");
}
#endif

img

肯定不行啊,第一个循环过后,就将前面5个换成后面5个了啊。第二个循环就没有意义了。你在替换前5个前,需要将原先的前5个元素记下来啊

因为你的循环在p1=p的时候让两个指针相等,修改p1就相当于修改p,你可以试着输出一下会发现变了的

img