c - 使用递归在C中反转字符串

标签 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);
    }
}

在此代码中,函数 reverse 能够一次获取输入句子的一个字符,对吗?如果它不是 '\n',它会再次调用反向函数。所以下次取第二个字符时,第二个字符将在变量 c 中,对吗?

如果是这样,这段代码如何能够反转给定的任何字符串? c 中的最终值是多少?

最佳答案

理解这一点的关键是 char c 变量是函数的本地。这意味着每次进入函数时都会在堆栈上分配它。在第二次和后续调用中,将在堆栈上创建变量的 实例。它们是独一无二的,不会相互干扰。

当最终看到终止字符\n 时,函数返回调用后的行,堆栈恢复到函数调用前的状态。这意味着变量 char c 将恢复到它以前的值。因此,堆栈展开,字符以输入的相反顺序打印。

一旦 reverse() 返回到 main()c没有最终值,因为包含它的堆栈框架将被销毁。

关于c - 使用递归在C中反转字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42549862/

相关文章:

java - 在二叉树的节点类中递归

algorithm - 给定分数列表的所有分数组合

c - 操作控制寄存器

c - 如何扫描时间?

python - 如何避免子串

c++ - 查找重叠子串的多个匹配项

java - 将 java 字符串拆分为模式明智的部分。

c - 在C中查找具有唯一数字的数字

c - __devexit_p 在驱动程序文件中的用途

javascript - 递归提取字符串中(嵌套)括号的内容