2017-09-11 42 views
-1

以下のサンプルプログラムでは、2つの関数の出力の違いを誰でも助けてくれますか?逆順で文字列を出力するCの再帰ルーチン

私の理解によれば、両方の機能の出力は同じでなければなりません。以下は

#include<stdio.h> 
void printRevStr1(char *ptr) 
{ 
     if(*ptr) 
     { 
       printRevStr1(ptr+1); 
       printf("%c",*ptr); 
     } 
} 
void printRevStr2(char *ptr) 
{ 
     if(*ptr) 
     { 
       ptr++; 
       printRevStr2(ptr); 
       printf("%c",*ptr); 
     } 
} 
main() 
{ 
     char arr[100]="Stackoverflow"; 
     printRevStr1(arr); 
     printf("\n"); 
     printRevStr2(arr); 
     printf("\n"); 
} 

出力、

出力

wolfrevokcatS 
wolfrevokcat 
+2

デバッガでコードをステップ実行しようとしましたか? –

+0

'printf("%c "、* ptr);の' ptr'の値は何ですか? –

答えて

2

非常に簡単です。

ジャスト機能ごとの以下の説明をご確認ください:

void printRevStr1(char *ptr) 
{ 
     if(*ptr) 
     { 
       printRevStr1(ptr+1); 
       printf("%c",*ptr); 
     } 
} 

あなたはこの機能を実装しながら、あなたが入力としてStackoverflow
文字列を取得するもの次に、あなただけの文字列を逆にし、それを印刷します。

第二の機能にある間:

void printRevStr2(char *ptr) 
{ 
     if(*ptr) 
     { 
       ptr++; 
       printRevStr2(ptr); 
       printf("%c",*ptr); 
     } 
} 

あなたが印刷前にwrittedてい声明:ptr++;は、あなたの文字列に次の文字へのポインタをシフトしています。これであなたの文字列はtackoverflow

になります。これがあなたに役立つことを願っています

2

それが正常に動作します...しかし、あなたが本当にそれは以前のものだ次の文字を、前進および印刷しているあります

void printRevStr2(char *ptr) 
{ 
    if(*ptr) 
    { 
     ptr++;     
     printRevStr2(ptr); 
     printf("%c",*(ptr - 1)); // <----- here 

    } 
} 

これは

wolfrevokcatS 
wolfrevokcatS 
関連する問題