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/