试图理解C中的程序

时间:2016-06-14 17:54:24

标签: c function pointers recursion

我试图在C中理解这种程序,但我无法理解。确切地说,我无法弄清楚* s是如何改变的,以及编译器显示210012的原因。

#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 ) ;
}

1 个答案:

答案 0 :(得分:4)

我认为很容易这样思考。在void函数中,char *s是一个指向char变量或char数组的指针。在您的情况下,它指向char数组s[20]="012"。在WhatIamDoing函数s中指向'0'个字符,并将其分配给char ch变量。然后s++现在&#39;&#39;指向字符'1'。你再次调用函数WhatIamDoing(s),它也是相同的(这就像一个递归函数),在最后WhatIamDoing(s)中,char ch被赋值为'2'。完成所有字符后,如果condition为false,则functions running (最后说到null字符)。在命令putchar的最后一项功能中,您打印'2',然后'1',然后'0'。这意味着在运行WhatIamDoing函数后,您将以相反的顺序打印char数组。在main函数中,您再次打印s字符串。那么你得到了"210021"。希望你明白这个主意。