当前位置:编程学习 > C/C++ >>

c语言求助 急急!!!!!!!!!!!!!

void reverse(char *s)
 {
  if (s[0]=='\0')
   return;
  else{
   reverse(&s[1]);
   putchar(s[0]);
  }

帮我详细解释一下这个代码是如何运行的.

追问:有一点不明白:当检查字符串结束时,它是如何一层层弹栈?能用字母解释一下吗?
答案:功能是逆序输出字符串
这个函数的形参是一个 字符型指针,但是这里写的不好,首先应该检查容错,看看指针是不是悬空指针。
如果这个输入串的第一个字符是0 ,即结束符,那么就可以返回了,此时执行结束。
否则的话,把抛开第一个字符的字符串作为新的输入串进行递归。。。。。
递归中间过程就不解释了。
递归尽头,检查发现到了字符串结束,于是一层层的弹栈,将前一个字符打印在屏幕上,形成了倒序输出。


多说一点,写这样的递归处理时不明智的。在操作系统分配的有限的函数栈空间中尽量避免过长的递归,然后字符串是一个长度很不确定的数据,稍长的字符串会 导致程序崩溃接受一个字符数组
如果第一个字符是'\0' 也就是字符数组为空
则直接返回
否则从第二个字符开始逆序,并输出

上一个:ANS标准定义C语言是什么?
下一个:C语言程序考题

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,