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

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的最终价值?

mha*_*wke 6

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

\n最终看到终止字符时,函数在调用后返回到该行,并且堆栈恢复到调用函数之前的状态.这意味着变量char c将恢复为之前的值.因此,堆叠被解开,其中字符以相反的顺序打印.

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