| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1825 人关注过本帖
标题:指针循环问题
只看楼主 加入收藏
sange
Rank: 2
等 级:论坛游民
帖 子:12
专家分:26
注 册:2011-3-8
结帖率:33.33%
收藏
已结贴  问题点数:20 回复次数:3 
指针循环问题
#include"stdio.h"
 void move(int array[20],int n,int m)
{
    int *p,array_end;
    array_end=*(array+n-1);
    for(p=array+n-1;p>array;p--)
        *p=*(p-1);
    *array=array_end;
    m--;
    if(m>0)move(array,n,m);


}

main()
{   
    int number[20],n,m,i;
    printf("How many numbers?");
    scanf("%d",&n);
    printf("input %d numbers :\n",n);
    for(i=0;i<n;i++)
        scanf("%d",&number[i]);
    printf("How mang places do you want to move?");
    scanf("%d",&m);
    move(number,n,m);
    printf("Now,they are:\n");
    for(i=0;i<n;i++)
        printf("%4d",number[i]);
}
解释move函数的作用:move是实现所有的元素循环后移m次,
比如:
1、2、3、4、5;循环后移2次:
第一次:
array_end=5;
执行这个后为:
for(p=array+n-1;p>array;p--)
 *p=*(p-1);
1、1、2、3、4
执行: *array=array_end; 后:
5、1、2、3、4
第二次:4、5、1、2、3、
这是网上解释的,有些不明白的是执行for语句后array_end已经是4了,array_end=4的值已经覆盖了原有的值5,怎么赋值给array[0]成了5,请高手指教,谢谢。
搜索更多相关主题的帖子: void include numbers 
2011-04-07 15:43
『点点滴滴』
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:168
专家分:1035
注 册:2007-7-9
收藏
得分:15 
array_end=*(array+n-1); //保存最后元素的值,数组里被覆盖,但是它的拷贝不会被覆盖
    for(p=array+n-1;p>array;p--)
        *p=*(p-1);
    *array=array_end;// array_end存的是最后一个数的值,赋值给第一个元素

2011-04-07 15:46
sange
Rank: 2
等 级:论坛游民
帖 子:12
专家分:26
注 册:2011-3-8
收藏
得分:0 
谢谢,黑侠大哥。
2011-04-07 15:53
ansic
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:恍惚窈冥
等 级:城市猎人
帖 子:1543
专家分:5367
注 册:2011-2-15
收藏
得分:5 
前段时间写过一个
程序代码:
//移动次数p,数组长度N
void move (int a[],int p,int N) {
        int i,j,k;
        for(i=0,j=N;i<p;i++,j++) {
                a[j]=a[i];
        }
        for(i=0,k=p;k<j;i++,k++) {
                a[i]=a[k];
        }
}

善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
2011-04-07 15:58
快速回复:指针循环问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020190 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved