C语言,以下程序运行后的输出结果为_____

#include<stdio.h>
#include<string.h>

void print(char *p)
{ static int len,offset;
offset=strlen(p)-len;
if(offset==0) return;
else printf("%c",*(p+offset-1));
len++;
print(p);
}

void main()
{ char str[]="dog";print(str);}
答案是god
请讲下过程,谢谢

递归函数。

开始时,len为0,offset=3,offset不为0,先输出p+offset-1上的元素,即*(p+2),为g,并len++,再调用print(str)。

之后,每次递归,len静态变量保存了上一次的值。实际上,len每加一,offset就随之向左偏移一位,指向前面的一个字符,也就是倒过来输出字符串中的每个字符。

直到len=strlen(str),offset为0时,返回,结束。

递归中执行else的次数为len次,即字符串的长度,倒过来输出原字符串。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-09-04
程序print是个递归程序,首先当一个字符串出现在函数的形参中时,由于是第一次出现,此时静态变量len,offset分别声明为0,以后将不再声明该静态变量。此时offset变化成字符串大小,如题,offset=4,那么p+4-1之后,就是p+3,此时P指针的位置指向了字符数组的第3个字符,也就是str[2],即g,并printf出来,然后就是len++,此时len变成了1,那么再调用函数时,由于不再声明变量len,offset,所以offset就=3了,然后就。。。直到offset=0,函数return,结束函数的调用。