使用递归函数反转字符串的概念

You*_*ein 1 c recursion pointers

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

例如,如果x指向一个数组ar[]="abc",为什么要打印"cba"?为什么它会打印,如果它只是一遍又一遍地重新进入函数,直到if为真然后它返回.

它是如何打印的?

Tim*_*all 5

如果你打电话foo3("hi"),它首先要看的是参数指向的'h' x.由于这不是零,因此它会调用foo3("i")- 意味着它传递了字符串其余部分的地址.

foo3("i")查看'i',看到它非零,并调用foo3("")- 从技术上讲,它将null终止符的地址传递给原始字符串.

foo3("") 查看null终止符,然后返回.

foo3("i") 打印'i'并返回.

foo3("hi") 打印'h'.

该函数有效,因为它打印"当前字符" 之前进行递归调用,因此字符串的其余部分将在它之前打印.