很快,我需要知道此功能的工作原理?里面有什么?传递的字符串如何反转?

这是代码,在此先感谢。

#include <stdio.h>
void rev (const char* const);

int main()
{
    char str [] = "Hey There";
    rev(str);

    return 0;
}

void rev(const char* const c)
{
    if(c[0]=='\0')
        return ;
    else
    {
        rev( &c[1]);
        putchar(c[0]);
    }
}


编辑:正如评论员的建议,我将解释我所不了解的内容。字符串不是反向的,而是反向打印的,好的。执行此操作的机制是什么?执行顺序是什么?

最佳答案

原因是代码指示它在处理输出当前char之前先处理字符串的其余部分。想象一下字符串“ on \ 0”

rev("on\0");
  ->rev("n\0");
    ->rev("\0");
      <-return;   // hits base case
    putchar('n'); // resumes after recursive call
    <-return;     // invisible return at end of function
  putchar('o');   // resumes after recursive call
  <-return;       // invisible return at end of function


这里的每个标识都代表一个嵌套调用。因此,在基本情况下,您同时有3个对rev的调用,每个调用都有不同的c

重要的是要知道c对于每次调用都是唯一的,因此当rev的调用返回到先前的rev c时,被调用方不会发生变化。这没什么特别的,因此实际上,它的作用方式与每次执行相同功能的调用不同函数的方式相同。返回上一个呼叫后,它将恢复。

09-30 14:02
查看更多