| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 726 人关注过本帖
标题:请教一道课后习题答案解析?
取消只看楼主 加入收藏
自强
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:132
专家分:130
注 册:2011-10-3
结帖率:96.77%
收藏
已结贴  问题点数:20 回复次数:2 
请教一道课后习题答案解析?
#include < stdio.h >
#include < string.h >

void fun ( char *w, int m )
{
    char s, *p1, *p2;

    p1 = w;
    p2 = w + m -1;

    while( p1 < p2 )
    {
        s = *p1++;
        *p1 = *p2--;
        *p2 = s;
    }
}

main()
{
    char a[] = "ABCDEFG";

    fun( a, strlen( a ) );
   
    puts( a );
}
//这是课后一道习题,我在思考了很久(不是前后两个字符进行交换么,一直交换到两个p1 > p2便停止交换),一直搞不懂为什么运行输出的是"AGAAGAG" ?

[ 本帖最后由 自强 于 2012-2-25 14:52 编辑 ]
搜索更多相关主题的帖子: ABCDEFG void 2012 include 
2012-02-25 14:50
自强
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:132
专家分:130
注 册:2011-10-3
收藏
得分:0 
回复 4楼 sanjianfei
我思考了一下你的建议
s = *p1++;
*( p1 - 1) = *p2--;
*( p2 + 1) = s;

第一次执行的时候:
s = *p1++;
s 变量 被赋值 字符 A
指针p1指向向下一个字符存储空间


*( p1 - 1) = *p2--;
这个时候,p1指向不变,但是引用的空间不是重新回到之前p1指向A字符的那个空间了么?

*( p2 + 1) = s;
这个时候,p2指向不变,但是引用的空间不是重新回到之前p2指向G字符的那个空间了么?

小弟我还是不太明白你这个建议,能否详细道来?

成为一名真正合格的程序设计人员,是我的梦想……我希望我的梦一直保持下去,直到我从这个世界消失……
2012-02-26 12:20
自强
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:132
专家分:130
注 册:2011-10-3
收藏
得分:0 
回复 8楼 xinyuanyuan
能否指点一下 非常感谢

成为一名真正合格的程序设计人员,是我的梦想……我希望我的梦一直保持下去,直到我从这个世界消失……
2012-02-26 20:32
快速回复:请教一道课后习题答案解析?
数据加载中...
 
   



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

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