标题:请教个问题
只看楼主
虫虫飞ya飞
Rank: 1
等 级:新手上路
帖 子:122
专家分:0
注 册:2005-11-28
 问题点数:0 回复次数:6 
请教个问题
#include<iostream.h>
void fun(char *b){
if(*b)
fun(b+1);
else
return;
cout<<*b;
}
int main(){
char a[]="abcdef";
fun(a);
}
这个程序有几个看不明白 if(*b)它到底判断是什么啊,若把cout<<*b;中 * 号去掉它的输出是fefdefcdefbcdefabcdef我怎么看也不明白杂会是这中结果呢。。。小弟初学还请大家多多指教谢谢

[此贴子已经被作者于2005-11-28 15:49:21编辑过]

搜索更多相关主题的帖子: include return 
2005-11-28 14:41
honey0607
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2005-9-15
得分:0 
if(*b)判断是否有字符
void fun(char *b)递归调用所以指针*b依次指向abcdef,bcdef,cdef,def,ef,f,
然后因为cout<<b;在调用的后面所以逆序输出结果!

2005-11-28 15:26
虫虫飞ya飞
Rank: 1
等 级:新手上路
帖 子:122
专家分:0
注 册:2005-11-28
得分:0 

关于*b的指向还是有点糊涂怎么指向abcdef后又指向bcdef呢。。。。


2005-11-28 15:59
柳儿
Rank: 6Rank: 6
等 级:贵宾
威 望:25
帖 子:1830
专家分:30
注 册:2004-9-23
得分:0 
因为 fun(b+1)里,把指针后移一位阿。

成功会使人骄傲。如果你骄傲自大,你就会停止学习。不学习,人就停止了进步
2005-11-28 16:01
虫虫飞ya飞
Rank: 1
等 级:新手上路
帖 子:122
专家分:0
注 册:2005-11-28
得分:0 
哦。。。原来fun(b+1)是这么理解的啊。。看来我一开始就想错了。。谢谢两位了

2005-11-28 16:14
kai
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:52
帖 子:3450
专家分:59
注 册:2004-4-25
得分:0 
cout<<*b; // 输出一个字符
cout<<b; // 输出该地址下的内容

由于用的是递归, 所以反向输出, 如果是 cout<<b 那么就是反向输出地址中的内容,
第一次地址下为 f
第二次地址下为 ef
第三次地址下为 def
第四次地址下为 cdef
第五次地址下为 bcdef
第六次地址下为 abcdef
所以连起来就是 fefdefcdefbcdefabcdef


自由,民主,平等,博爱,进步.
中华民国,我的祖国,中华民国万岁!中华民国加油!
本人自愿加入中国国民党,为人的自由性,独立性和平等性而奋斗!
2005-11-28 16:27
虫虫飞ya飞
Rank: 1
等 级:新手上路
帖 子:122
专家分:0
注 册:2005-11-28
得分:0 
我又想想终于有点明白了。。。if(*b)fun(b+1)使得*b指向abcdef,bcdef,cdef,def,ef,f
如果输出的是cout<<*b;就逆序输出它们的首指针就是fedcba,如果输出是cout<<b;则是把b的值逆序输出
也就是f fe fed fedc fedcb fedcba我这样理解对不啊

2005-11-28 16:29



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




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

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