用指针法实现
解题思路:
(1)在函数中,新建一个数组,把原数组中的后m个数字先复制到这个新建的数组中
(2)原数组中的元素向后移动m个位置
(3)把新建数组中存贮的m个元素,复制到原数组中
注意点:
“移动过程中数组的下标的计算要准确”
源程序代码:
#include<stdio.h>
#define _CRT_SECURE_NO_WARNINGS
#define N 10
int main(void) {
void Process(int *q, int m);//函数声明
int a[10];
int *p;
p = a;//a是常量,p是变量
for (; p <a + 10; p++)
{
printf_s("输入一个数\n");
scanf_s("%d", p);
}
//调用处理函数
Process(a,5);
p = a;
printf_s("输出数组\n");
for (; p < a + 10; p++)
{
printf_s("%d",*p);
}
}
void Process(int *q, int m)
{
int b[10];//这个数组用来存放原数组中需要转移的m个数
int *ptr_b, *ptr_q;
int i;
ptr_b = b;//获得数组的起始地址
ptr_q = q;//获取原数组的起始地址
for (i = 0; i < m; i++)
{
//先把这m个数据取出来放在数组b中
*ptr_b = *(ptr_q + (N - m));
ptr_b++;
ptr_q++;
}
//原数组前面的N-m个数向后移动m个位置
for(i = 0; i < N - m;i++)
{
*ptr_q = *q;
q++;
ptr_q++;
}
//把数组b中的前m个数字,复制到原数组的前m个位置
for (i=0;i<m;i++)
{
*(q - m) = *(ptr_b-m);
ptr_b++;
q++;
}
//return;
}