我不明白stringReverse函数如何工作

谁能向我解释一下?

实际上((stringReverse(&strArray [1]);))含糊。

#include <iostream>

using namespace std;

void stringReverse( const char [] );

int main()
{
const int SIZE = 30;
char strArray[ SIZE ] = "Print this string backwards.";

for ( int loop = 0; loop < SIZE; ++loop )
cout << strArray[ loop ];

cout << '\n';
stringReverse( strArray );
cout << endl;

return 0;
}

void stringReverse( const char strArray[] )
{
if ( strArray[ 0 ] == '\0' )
return;

stringReverse( &strArray[ 1 ] );
cout << strArray[ 0 ];
}

最佳答案

如果您使用短字符串(例如"123")将其写在纸上,则实际上非常简单。使用stringReverse的参数调用"123"会导致以下调用:

stringReverse("123")
  -> stringReverse("23")
       -> stringReverse("3")
            -> stringReverse("")
               // strArray[0] == 0
               -> return
          cout << '3'
      cout << '2'
cout << '1'

该函数以递归方式调用自身,在每次调用时将当前字符指针前移一个字符,直到到达末尾并立即返回。剩下的是递归调用的输出(cout),它尚未运行。

换句话说:每个递归调用都会在堆栈上放置一个字符。一旦到达末尾,并返回最后的递归调用,函数将从中断处开始(在递归调用之后)开始,将字符从堆栈的顶部打印到底部。

10-08 10:48