Nit*_*hna 1 c string recursion reverse
任何人都可以帮我理解这个字符串翻转是如何工作的吗
#include <stdio.h>
void reverse();
int main()
{
printf("Enter a sentence: ");
reverse();
return 0;
}
void reverse()
{
char c;
scanf("%c", &c);
if( c != '\n')
{
reverse();
printf("%c",c);
}
}
Run Code Online (Sandbox Code Playgroud)
在这段代码中,函数reverse能够一次输入一个字符,对吗?如果它不是'\n',它会再次调用反向函数.所以下次第二个字符出现时,第二个字符将在变量c中,对吧?
如果是这样,这段代码如何能够反转给出的任何字符串?什么是c的最终价值?
理解这一点的关键是char c变量是函数的本地变量.这意味着每次输入函数时都会在堆栈上分配它.在第二次和后续调用中,在堆栈上创建变量的新实例.这些是独一无二的,不会相互干扰.
当\n最终看到终止字符时,函数在调用后返回到该行,并且堆栈恢复到调用函数之前的状态.这意味着变量char c将恢复为之前的值.因此,堆叠被解开,其中字符以相反的顺序打印.
一旦reverse()返回到main()那里将没有最终值,c因为包含它的堆栈帧将被销毁.