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

この関数は、文字列内の連続するすべての文字に対して再帰的に自分自身を呼び出し\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

これらの2つの手順を繰り返して、文字列の最後であるベースケースに到達します。


文字列を逆にするのではなく、単に文字列を逆に印刷します。

于 2013-01-26T04:36:06.617 に答える
4

文字列が「Viad」であるとします

まず、逆関数に「Viad」を送信します。

reverse("Viad");

逆関数では、再び逆関数を呼び出していますが、今回は2番目の文字のアドレスを送信しています。つまり、「iad」を送信しています。

reverse("iad");

再びリバースを呼び出し、「広告」を送信します。

reverse("ad");

再び「d」、

reverse("d");

これで、「\0」終了文字が送信されます

今度はそれとreturn今は巻き戻しStack functionalityます。つまり、他の関数を呼び出すと、変数の現在のステータスがスタックに保存され、その関数からすべてのステートメントが完了すると、スタックからすべての保存されたステータスがポップされることを意味します。

今それは声明に行きます

putchar('d');

「d」を出力します&

次に、「da」、「dai」、「daiV」の順に印刷されます。つまり、巻き戻しが行われます。

于 2013-01-26T04:42:04.623 に答える