我不明白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
),它尚未运行。换句话说:每个递归调用都会在堆栈上放置一个字符。一旦到达末尾,并返回最后的递归调用,函数将从中断处开始(在递归调用之后)开始,将字符从堆栈的顶部打印到底部。