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为真然后它返回.
它是如何打印的?
如果你打电话foo3("hi"),它首先要看的是参数指向的'h' x.由于这不是零,因此它会调用foo3("i")- 意味着它传递了字符串其余部分的地址.
foo3("i")查看'i',看到它非零,并调用foo3("")- 从技术上讲,它将null终止符的地址传递给原始字符串.
foo3("") 查看null终止符,然后返回.
foo3("i") 打印'i'并返回.
foo3("hi") 打印'h'.
该函数有效,因为它在打印"当前字符" 之前进行递归调用,因此字符串的其余部分将在它之前打印.
| 归档时间: |
|
| 查看次数: |
64 次 |
| 最近记录: |