3个回答
展开全部
函数f(p,t)中,前面两行是把p和t所指向的内容互换,
也就是说,第一次执行的时候是把c和e互换,
然后s指指针向后移动,也就是指向f所在单元,t指指针向前移动,也就是指向b,
判断s指向的内容是否为空,此时s不为空,所以继续执行f(p,t),这是递进。
以此类推,s逐渐后移,t逐渐前移,直到s指向g所在单元后面那个单元,程序不再递进,开始返回。
最后的结果就是把字符串的顺序互换。
在这里,把f(p,t)分解开来就是:
f(p,t)
{
char k;
k=*p;*p=*t;*t=k;
s++;t--;
k=*p;*p=*t;*t=k;
s++;t--;
k=*p;*p=*t;*t=k;
s++;t--;
}
也就是说,第一次执行的时候是把c和e互换,
然后s指指针向后移动,也就是指向f所在单元,t指指针向前移动,也就是指向b,
判断s指向的内容是否为空,此时s不为空,所以继续执行f(p,t),这是递进。
以此类推,s逐渐后移,t逐渐前移,直到s指向g所在单元后面那个单元,程序不再递进,开始返回。
最后的结果就是把字符串的顺序互换。
在这里,把f(p,t)分解开来就是:
f(p,t)
{
char k;
k=*p;*p=*t;*t=k;
s++;t--;
k=*p;*p=*t;*t=k;
s++;t--;
k=*p;*p=*t;*t=k;
s++;t--;
}
追问
一开始P不是e吗p-2不是c吗互换之后动指针不久两个都变成d了吗
追答
最开始,e的地址是str+4;c的地址是str+2
指针存放的是地址,不是值。
所以p的值是str+4,t的值是str+2
互换的语句是“k=*p;*p=*t;*t=k;”
这里,*p等于地址str+4中的值,就是e,不是str+4
所以是str+4与str+2中的值互换,p本身的值不变,仍然是str+4。
随后p++,那么p就变为了str+5,也就是指向了f,同理t的值变为str+1,指向了b
展开全部
我再修改一下答案,看了你的解释后,我想通了,就是一直调用函数f,
交换第一次后就是abedcfg,
交换第二次就是afedcbg,
第三次就是gfedcba。
交换第一次后就是abedcfg,
交换第二次就是afedcbg,
第三次就是gfedcba。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2014-03-06
展开全部
是不是选C 呀
更多追问追答
追问
是B
追答
涉及到一个递归调用的 问题,他那个会一直调用f(s,t)这个函数知道最后结束,
字符串的存储最后一位是/0 结束的
会调用3次,每次调用交换一下值,所以结果选B
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询