御笔剑客 发表于 2018-3-21 19:20:51

为什这个翻转字符串的函数会多出来一个空格呢?

#include <stdio.h>
void foo(char * s)
{
    if (*s != '\0')
      foo(s + 1);
    printf("%c", (char)*s);
}
int main()
{
    char s[] = "hello world";
    foo(s);
}

ba21 发表于 2018-3-21 19:56:01

    if (*s != '\0')
        {
      foo(s + 1);
                printf("%c", *s);
        }
这样应该能明白了吧。

人造人 发表于 2018-3-21 22:29:40

void foo(char * s)
{
    if (*s != '\0')
      foo(s + 1);
    printf("%c", (char)*s);
}

*s != '\0' 时执行 foo(s + 1);
那等于 '\0' 时怎么办?
等于 '\0',if 条件不成立
不执行 foo(s + 1);
继续向下执行,执行 printf("%c", (char)*s);
别忘了现在 *s 是 '\0'
所以
printf("%c", (char)*s);
也就是
printf("%c",'\0');


人造人 发表于 2018-3-21 22:32:57

#include <stdio.h>

void foo(char *s)
{
        if(*s != '\0')
                foo(s + 1);
        else
                return;

        printf("%c", (char)*s);
}

int main(void)
{
        char s[] = "hello world";
        foo(s);

        return 0;
}
页: [1]
查看完整版本: 为什这个翻转字符串的函数会多出来一个空格呢?