很快,我需要知道此功能的工作原理?里面有什么?传递的字符串如何反转?
这是代码,在此先感谢。
#include <stdio.h>
void rev (const char* const);
int main()
{
char str [] = "Hey There";
rev(str);
return 0;
}
void rev(const char* const c)
{
if(c[0]=='\0')
return ;
else
{
rev( &c[1]);
putchar(c[0]);
}
}
编辑:正如评论员的建议,我将解释我所不了解的内容。字符串不是反向的,而是反向打印的,好的。执行此操作的机制是什么?执行顺序是什么?
最佳答案
原因是代码指示它在处理输出当前char之前先处理字符串的其余部分。想象一下字符串“ on \ 0”
rev("on\0");
->rev("n\0");
->rev("\0");
<-return; // hits base case
putchar('n'); // resumes after recursive call
<-return; // invisible return at end of function
putchar('o'); // resumes after recursive call
<-return; // invisible return at end of function
这里的每个标识都代表一个嵌套调用。因此,在基本情况下,您同时有3个对
rev
的调用,每个调用都有不同的c
。重要的是要知道
c
对于每次调用都是唯一的,因此当rev
的调用返回到先前的rev
c
时,被调用方不会发生变化。这没什么特别的,因此实际上,它的作用方式与每次执行相同功能的调用不同函数的方式相同。返回上一个呼叫后,它将恢复。