标题:请教一道课后习题答案解析?
只看楼主
自强
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:132
专家分:130
注 册:2011-10-3
结帖率:96.77%
已结贴  问题点数:20 回复次数:9 
请教一道课后习题答案解析?
#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
yxiangyxiang
Rank: 3Rank: 3
来 自:/\/\/\/\/
等 级:论坛游侠
帖 子:130
专家分:186
注 册:2012-1-29
得分:10 
s = *p++;
等价
s = *p;
p++;
2012-02-25 15:49
回首依依
Rank: 7Rank: 7Rank: 7
来 自:苏州
等 级:黑侠
威 望:1
帖 子:193
专家分:524
注 册:2011-12-3
得分:10 
#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--;//此处的p1值改变了,你这已经不是互换喽。p1++,p2--还是分开写啊。
         *p2 = s;
     }
 }
 
main()
 {
     char a[] = "ABCDEFG";
 
    fun( a, strlen( a ) );
     
    puts( a );
 }
2012-02-25 16:00
sanjianfei
Rank: 2
等 级:论坛游民
帖 子:48
专家分:53
注 册:2012-2-21
得分:0 
按楼上说的改,就更错了
把这部分改了就行
s = *p1++;  实指向A,在下一行,由于pl+1了,所以指针变成指向第二个了,交换就出问题,后面也是;
*p1 = *p2--;
*p2 = s;
 改成:
 s = *p1++;
 *(p1-1) = *p2--;
 *(p2+1) = s;
语文不太好 不知你听明白了吗?
2012-02-25 16:43
sanjianfei
Rank: 2
等 级:论坛游民
帖 子:48
专家分:53
注 册:2012-2-21
得分:0 
有时差啊 我指的是二楼
2012-02-25 16:45
回首依依
Rank: 7Rank: 7Rank: 7
来 自:苏州
等 级:黑侠
威 望:1
帖 子:193
专家分:524
注 册:2011-12-3
得分:0 
回复 5楼 sanjianfei
呵呵
2012-02-25 17:05
自强
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
xinyuanyuan
Rank: 2
等 级:论坛游民
帖 子:12
专家分:10
注 册:2012-2-14
得分:0 
楼主还没理解题意,需要继续领悟!
2012-02-26 13:05
自强
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:132
专家分:130
注 册:2011-10-3
得分:0 
回复 8楼 xinyuanyuan
能否指点一下 非常感谢

成为一名真正合格的程序设计人员,是我的梦想……我希望我的梦一直保持下去,直到我从这个世界消失……
2012-02-26 20:32
missu_1314
Rank: 2
等 级:论坛游民
帖 子:46
专家分:98
注 册:2010-9-8
得分:0 
#include<stdio.h>
#include<string.h>


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

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

 while (p1 < p2)
 {
   {
    s  = *p1;
    *p1 = *p2;
    *p2 = s ;
   }
  p1++;       //关键在这,,先互换,再让指针变动
  p2--;
 }
}


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

    fun_Change( a, strlen( a ) );
     
    puts( a );

    getch();
}
2012-02-27 16:07



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-361613-1-1.html




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

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