c++整数平移问题,部分代码有些疑惑

1.p1--注释的那部分有些疑惑,位置换了,然后就无法运行出结果,不明白为什么
2.代码如下:
#include
using namespace std;
int main()
{
void move(int[], int,int);
int a[5] = { 1,2,3,4,5 };
int m;
cout << "请输入你要移动几位数:";
cin >> m;
move(a, 5,m);
return 0;
}
void move(int a[], int n,int m)
{

int* p1,*p2;
int i=1,t;
while(i<=m)
{
    p1 = a + n - 1;
    t = *p1;
    p2 = a;
    while (p1 > a)
    {
        *p1 = *(p1 - 1);
        p1--;
    }
    *p2 = t;
    //p1--;放在这里的时候,程序无法运行出结果;
    i++;
}
for (i = 0; i < n; i++)
    cout << a[i] << " ";

}

写程序的目的不是为了故弄玄虚,而是要写出简单,让人可以理解的代码
你的程序看着眼花缭乱,如同玩杂耍。
你的程序让我这样职业码农都不能很容易看懂,你觉得正常么?
看下面的示范
记住一个原则,一个函数只能做一件事情。

#include <iostream>

using namespace std;

void move(int[], int,int);
void move(int[], int);
int main()
{
    int a[5] = { 1,2,3,4,5 };
    int m;
    cout << "请输入你要移动几位数:";
    cin >> m;
    move(a, 5, m);
    for (int i = 0; i < 5; i++) //输出的代码放在主程序
        cout << a[i] << " ";
    return 0;
}
void move(int a[], int n) //这个函数只负责移动一次
{
    int x = a[n - 1]; //把最后一个数字暂存起来
    for (int i = n - 1; i > 0; i--) //从后往前每个数字等于前面一个数字,等于往后移动,特别注意,我的程序里的i相当于你的p1指针,所以你明白为什么你i--不能放在循环外面了吧,因为每次都要-1
        a[i] = a[i - 1];
    a[0] = x; //最后一个数字放在第一个
}
void move(int a[], int n, int m) //这个函数只负责调用n次移动一次的那个move
{
    for (int i = 0; i < m % n; i++) //因为移动每n次,又转回来,相当于没有移动,所以只需要移动m % n次。
        move(a, n);
}

数组循环右移 https://www.zhihu.com/question/52610881