void foo3(char *x)
{
  if (!*x) return;
  foo3(x+1);
  printf("%c ",*x);
}

例如,如果x指向数组,为什么要打印ar[]="abc"为什么它甚至会打印,如果它只是不断地重新输入函数,直到if为真,然后它返回。
怎么打印?

最佳答案

如果调用foo3("hi"),它做的第一件事就是查看参数x指向的“h”因为它不是零,所以它调用foo3("i")——这意味着它传递字符串其余部分的地址。
foo3("i")查看“i”,看到它是非零的,然后调用foo3("")——从技术上讲,它将空终止符的地址传递给原始字符串。
foo3("")查看空终止符并返回。
foo3("i")打印“i”并返回。
foo3("hi")打印“h”。
该函数之所以起作用,是因为它在打印“当前字符”之前进行递归调用,以便在打印之前打印字符串的其余部分。

关于c - 使用递归函数反转字符串的概念,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54080123/

10-11 20:59