代码:
#include <stdio.h>
#define N 8
int main(){
void move(int *q);
int num[N],*p=num;
printf("请输入%d个数:\n",N);
/*
//第一种:移动指针,指针每次☞的值不一样
for(p=num;p<(num+N);p++){
scanf("%d",p);
}
for(p=num;p<(num+N);p++){
printf("%d ",*p);
}
*/
//第二种:指针不动,指针☞的值未变,始终为num[0]
for(int i=0;i<N;i++){
scanf("%d",p+i);
}
printf("您输入的%d个数原顺序为:\n",N);
for(int i=0;i<N;i++){
printf("%d ",*(p+i));
}
printf("\n--------------------------\n");
// printf("*p=%d\n",*p);
move(p);
return 0;
}
void move(int *p){
int m,flag=1,num2[N]={0},*q,i,j;
q=num2;
// printf("移动前*q=%d\n",*q);
printf("请输入将后几位数往前移:");
do{
scanf("%d",&m);
if(m>=N||m<=0)
printf("输入不符合要求,请重新输入:");
else flag=0;
}
while(flag);
printf("\n--------------------------\n");
//将数组后面的m位往前移动N-m个位置
for(i=0;i<N;i++){
if(i<m){
j=i+(N-m);
//假设m=3,N=8;
//num2[0]=num[3];
*(q+i)=*(p+j);
// printf("num2[%d]=%d\n",i,*(q+i));
}
else{
//此时i=m+1
j=i-m;
*(q+i)=*(p+j);
}
}
// printf("移动后*q=%d\n",*q);
printf("移动后的顺序为:\n");
for(i=0;i<N;i++){
printf("%d ",*(q+i));
}
printf("\n");
}
运行结果: