编写一个函数,使一维数组(长度为m)元素循环右移一位,函数原型为:void rmove(int *p , int m); ?

编写一个函数,使一维数组(长度为m)元素循环右移一位,函数原型为:voidrmove(int*p,intm);。【提示】数组元素循环右移一位的意思是:最后一个元素移到第一... 编写一个函数,使一维数组(长度为m)元素循环右移一位,函数原型为:void rmove(int *p , int m); 。
【提示】
数组元素循环右移一位的意思是:最后一个元素移到第一个,其它元素整体右移一个位置,如{1,2,3,4}循环右移一位后变成{4,1,2,3}。
假设有定义int a[4]={1,2,3,4},*p=a; 。
要求循环右移一位,通常要循环用到*(p+i)=*(p+i-1),即*(p+3)=*(p+2)、*(p+2)=*(p+1)、*(p+1)=*p。还有*p=*(p+3),但从前面看*(p+3)已被*(p+2)取代,亦即*(p+3)的值未被保存。所以在循环执行语句”*(p+i)=*(p+i-1);”前,要用一个临时变量比如t来保存*(p+3),最后将t赋值给*p即可。代码如下:
int t=*(p+3);
for(i=3;i>0;i--) //注意i的初值和终值
*(p+i)=*(p+i-1);
*p=t;
展开
 我来答 举报
野人马
2020-05-25 · 超过50用户采纳过TA的回答
知道小有建树答主
回答量:147
采纳率:43%
帮助的人:70.7万
展开全部

#include<stdio.h>

void rmove(int *p , int m){

int t=p[m-1];

for(int i=m-1;i>0;i--){

*(p+i)=*(p+i-1);}

*p=t;

}

int main(){

int a[]={1,2,3,4};

rmove(a,4);

for(int i=0;i<4;i++)

printf("  %d",a[i]);

}

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式