#include<stdio.h>
int foo(char a[])
{
if(a[1]=='\0')
{
return 0;
}
foo(a+1);
foo(a+1);
printf("%c ",a[1]);
}
int main()
{
foo("123");
}
上述程序的输出结果如何:3 3 2 我认为输出是:3 请解释..谢谢。
答案 0 :(得分:3)
这基本上是按时间顺序发生的事情:
foo(['1','2','3','\0']):
a[1] != '\0'
foo(['2','3','\0']):
a[1] != '\0':
foo('3','\0'):
a[1] == '\0' (end)
foo('3','\0'):
a[1] == '\0' (end)
print '3'
foo(['2','3','\0']):
a[1] != '\0':
foo('3','\0'):
a[1] == '\0' (end)
foo('3','\0'):
a[1] == '\0' (end)
print '3'
print '2'
注意事项:
printf
语句时都会发生打印 - 这不止一次,只要函数没有在stop子句中结束就会发生。答案 1 :(得分:2)
您的代码是递归的,但在调用foo(..)
时,它会修改a
的本地值,而不是全局值。
因此,当代码从内部foo(..)
调用返回时,它会在原始字符串中输出[1],即“2”。
这就是为什么你看到3,3,然后当最后的递归返回时,2
与我的以下评论相关:
int foo(char a[])
向
int foo(char *a)
和
foo("123");
向
char string[] = "123";
foo(&string);
您还需要将a[1]
更改为a+1