2016-06-14 5 views
-2

私はこの種のプログラムをC言語で理解しようとしていますが、できません。正確には、私が把握することはできませんどのようにS *を変更し、コンパイラが210012.Cでプログラムを理解しようとしています

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

void WhatIamDoing(char *s) { 
    char ch; 
    if (*s) { 
     ch = *s; 
     s++; 
     WhatIamDoing(s); 
     putchar(ch); 
    } 
} 


int main() { 
     char s[20] = "012" ; 
     WhatIamDoing(s) ; 
     printf("%s", s) ; 
} 
+5

申し訳ありません。これは「コードを説明する」または教師サイトではありません。 See [ask]。 – Olaf

+0

@Olaf誰が言ってるの? –

+0

あなたは*回帰*について聞いたことがありますか?特に* head recursion *について? –

答えて

4

を示し、なぜ私はこのように考えるのは簡単だと思います。 void関数char *sは、char変数またはchar配列を指すポインタです。あなたの場合、それは文字配列s[20]="012"を指していました。 WhatIamDoingの機能sは、'0'の文字を指し、char chという変数に割り当てられます。次に、s++の 's'は文字'1'に向けられます。再び関数WhatIamDoing(s)を呼び出すと、同じことが起こります(これは再帰関数のようです)。最後にWhatIamDoing(s)char chには'2'と割り当てられます。すべての文字が終了した後、条件がfalseの場合は、functions running (最終的にはnull文字になります)。最後にコマンドputcharによって、'2'を印刷し、次に'1''0'とします。これは、WhatIamDoing関数を実行した後、char配列を逆順に出力することを意味します。 main関数では、s文字列を再度出力します。したがって、あなたは"210021"を取得します。あなたがそのアイデアを得ることを望みます。

+0

したがって、* sがNullを指しているとき、条件が偽。しかし、逆の方法でアレイを印刷するのはなぜですか? –

+0

これは答えで説明されています - 'putchar'はstringの文字を逆順に出力します – zoska

関連する問題