| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 756 人关注过本帖
标题:大侠们 帮忙看看这程序那里出了问题 我是新手 谢谢
只看楼主 加入收藏
chaxiu
Rank: 1
等 级:新手上路
帖 子:10
专家分:8
注 册:2012-10-24
收藏
得分:3 
有点看不懂啊~
2012-10-24 23:46
LShang
Rank: 4
来 自:China
等 级:业余侠客
威 望:3
帖 子:183
专家分:258
注 册:2010-12-24
收藏
得分:0 
思考一下程序流程应该就可以了
结果是1711717
如果fun函数本身是想要实现将字符串倒叙输出的话
那是在指针运算部分出错了
我简单说下fun函数的执行流程
首先p作为参数被传入fun函数
程序代码:
fun(char * w,int n)
{
    char t,*s1,*s2;
    s1 = w; /* 此时s1的值是字符串"1234567"的地址 */
    s2 = w + n - 1; /* 此时s2的值是字符串"1234567"中'7'的地址 */
    while(s1 < s2)
    {
        t = *s1++;
        *s1 = *s2--;
        *s2 = t;
    /* 
        函数就是靠这个循环来混淆视线,或者说问题就出在这个循环
        首先假设一下p的值为0
        第一次循环:
        s1 = 0,对应 '1' 地址,s2 = 6, 对应 '7' 地址
        t = *s1++; 即 t = *s1; s1++;
        执行后 t = '1',s1 = 1, 对应 '2' 地址
        *s1 = *s2--;即 *s1 = *s2; s2--;
        执行后 '2' 变成 '7',s2 = 5, 对应 '6' 的地址
        *s2 = t;
        执行后 '6' 变成 '1'
        此时字符串为 "1734517"
        s1 = 1,s2 = 5 满足循环条件,继续执行循环体
        t = *s1 ++;
        /t = '7',s1  = 2
        *s1 = *s2 --;
        /'3' 变成 '1',s2 = 4
        *s2 = t;
        /'5' 变成 '7’
        此时字符串为 "1714717"
        s1 = 2,s2 = 4 满足循环条件,继续执行循环体
        t = *s1 ++;
        /t = '1',s1 = 3
        *s1 = *s2 --;
        /'4' 变成 '7',s2 = 3
        *s2 = t;
        /'7' 变成 '1'
        此时字符串为 "1711717"
        s1 = 3,s2 = 3 不满足循环条件,退出循环体
     */
    }
}

学如逆水行舟,不进则退
士不可以不弘毅,任重而道远
2012-10-27 20:40
快速回复:大侠们 帮忙看看这程序那里出了问题 我是新手 谢谢
数据加载中...
 
   



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

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