【发布时间】:2013-08-07 16:43:33
【问题描述】:
我想知道是否有人可以解释这个小代码 sn-p 的工作原理。
void reverse(char *s)
{
if(*s)
reverse(s+1);
else
return;
cout << *s;
}
当您在 main 中调用此函数时,它应该会打印出输入的任何字符串的反面(即 hello 将 cout 为 olleh),但我不明白如何。据我了解, if 语句会增加 s 的值,直到它到达字符串的末尾,同时打印出字符串中的每个值。为什么不只是重新打印字符串。显然我错过了一些东西。 (抱歉顺便说一句,我是 C++ 和递归函数的新手)
【问题讨论】:
-
尝试通过这个函数手动滚动一个短字符串(“猫”或“狗”会浮现在脑海中)并在纸上记录,一次一步,发生了什么。您可能想先学习指针算法。
-
您可能会遇到的问题是字符串末尾有一个 \0,因此
if语句有一个退出条件。 -
仅供参考,您也可以使用 std::reverse
-
@RobertHarvey 我知道存在退出条件。但是,这不只是意味着 *s 指向字符串中的最后一个值吗?其余的值是怎么打印出来的?
标签: c++ function pointers recursion reverse