C++打印反向字符串

C++打印反向字符串,c++,string,pointers,reverse,C++,String,Pointers,Reverse,该程序工作正常,并按要求执行。我的问题是关于ReverseName函数,以及它到底是如何工作的。我能够从书中的一些例子中对其进行反向工程,但我不能完全理解它是如何工作的。我得到的名字是寄给它的。我就是不明白它是怎么倒印的 #include <iostream> using namespace std; void ReverseName(char *s ); int main(void){ char Name[] ="John Doe"; cout <

该程序工作正常,并按要求执行。我的问题是关于ReverseName函数,以及它到底是如何工作的。我能够从书中的一些例子中对其进行反向工程,但我不能完全理解它是如何工作的。我得到的名字是寄给它的。我就是不明白它是怎么倒印的

#include <iostream>
using namespace std;


void ReverseName(char *s ); 

int main(void){ 

    char Name[] ="John Doe";

    cout << "Name is: " << Name << "\n" << "Name Backwards is: " ;

    ReverseName(Name); 

    cout << "\nName is: "<< Name << '\n';

    return 0; 
} 

void ReverseName(char * s){ 

    if(*s){ 
        ReverseName(s+1); 
        cout << *s; 
        } 

    return; 
}

这是一个递归函数

它获取一个指向char数组的指针并调用自己,直到到达char数组的末尾,然后它展开递归,从后面打印所有字符

void ReverseName(char * s){ 

    if(*s){ 
        ReverseName(s+1); // come into the end of the string 
        cout << *s; 
        } 

    return; 
}
当堆栈到达递归的末尾时,它将按顺序执行。然后它就像

                                       cout << 'e'
                            cout << ...
                 cout << 'h'
        cout << 'o'
cout << 'J' 

(come back from the call stack)

ReverseName是一个递归函数


可以使用调试器跟随执行流程。要添加到@chris,您可以阅读递归函数使用调试器在函数内设置断点,然后在通过单步执行递归调用函数时观察变量。
                                       cout << 'e'
                            cout << ...
                 cout << 'h'
        cout << 'o'
cout << 'J' 

(come back from the call stack)