谁能帮我理解这个字符串反转是如何工作的?
#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);
}
}
在此代码中,函数 reverse 能够一次获取输入句子的一个字符,对吗?如果它不是 '\n',它会再次调用反向函数。所以下次取第二个字符时,第二个字符将在变量 c 中,对吗?
如果是这样,这段代码如何能够反转给定的任何字符串? c 中的最终值是多少?
最佳答案
理解这一点的关键是 char c
变量是函数的本地。这意味着每次进入函数时都会在堆栈上分配它。在第二次和后续调用中,将在堆栈上创建变量的新 实例。它们是独一无二的,不会相互干扰。
当最终看到终止字符\n
时,函数返回调用后的行,堆栈恢复到函数调用前的状态。这意味着变量 char c
将恢复到它以前的值。因此,堆栈展开,字符以输入的相反顺序打印。
一旦 reverse()
返回到 main()
,c
将没有最终值,因为包含它的堆栈框架将被销毁。
关于c - 使用递归在C中反转字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42549862/