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);
}