3
#include <stdio.h>

  void reverse( const char * const sPtr );

   int main ( void ) {

     char sentence[ 80 ];
     fgets( sentence, 80, stdin);

     reverse (sentence);
     return 0; 
  }

   void reverse( const char * const sPtr ){

     if (sPtr[0] == '\0' )
       return;
     else {
        reverse( &sPtr[1] );
        putchar (sPtr [0] );
     }

我通常对反向功能的工作方式感到困惑?我看不到指针是如何递增以指向下一个字符的,我不知道我是否完全理解 putchar 的作用。任何帮助,将不胜感激。

4

2 回答 2

4

假设你的字符串是“Viad”

首先它发送“Viad”来反转功能,

reverse("Viad");

在反向函数中,您再次调用反向函数,但这次您发送的是第二个字符的地址,即您发送的是“iad”,

reverse("iad");

它再次调用反转,现在它发送“广告”,

reverse("ad");

再次“d”,

reverse("d");

现在它发送 '\0' 结束字符

现在这一次它return&现在它倒带是因为Stack functionality,即当我们调用一些其他函数时,它会将变量的当前状态保存在堆栈中,并且在完成该函数的所有语句后,它返回意味着它从堆栈中弹出所有保存的状态

现在它去声明

putchar('d');

它打印“d”&

然后它打印“da”,然后是“dai”,然后是“daiV”,这意味着它会继续倒带

于 2013-01-26T04:42:04.623 回答
4

此函数为字符串中的每个连续字符递归调用自身,并在到达\0字符时(基本情况)以相反的顺序展开打印字符。


第 1 步

void reverse( const char * const sPtr ){ //This calls the function with string

这里,sPtr 指向字符串的第一个字符。

第 2 步

reverse( &sPtr[1] ); //This calls the function with the next character of the string

这条线将功能向前推进。

第 3 步

重复这两个步骤,您将到达字符串的末尾,即基本情况。


它不是反转字符串,而是简单地反向打印字符串。

于 2013-01-26T04:36:06.617 回答