以下程序的输出结果是什么,解释一下,不懂

voidfun(char*w,intm){chars,*p1,*p2;p1=w;p2=w+m-1:while(p1<p2){s=*p1++;*p1=*p2++;*p2=s... void fun(char *w , int m)
{ char s, *p1,*p2;
p1=w; p2=w+m-1:
while(p1<p2)
{s=*p1++;*p1=*p2++;*p2=s;}
}

main()
{ char a[]="ABCDEFG";
fun(a,strlen(a));
puts(a);
}
展开
 我来答
xndcn
2008-01-25 · TA获得超过826个赞
知道小有建树答主
回答量:287
采纳率:0%
帮助的人:435万
展开全部
如果按照你的程序,排除语法错误后,那输出结果是:什么也没有!

知道为什么吗?因为有个死循环!
p1=w; p2=w+m-1;
while(p1<p2)
{s=*p1++;*p1=*p2++;*p2=s;}
}

首先p1指向了字符串w的首元素,p2指向尾元素。此时显然有p1<p2,好,进入循环。随后不断有*p1++和*p2++,也就是说p1和p2都向后移动一位,此后p1<p2永远成立!因为p2-p1是定值等于m-1。

根据你的程序,我估计是想让char a[]="ABCDEFG";首尾对调变成"GFEDCBA"吧?

我帮你改好了
s=*p1++;*p1=*p2++;*p2=s;
改成
s=*p1++;*(p1-1)=*p2--;*(p2+1)=s;
输出结果就是"GFEDCBA"。具体为什么,参看我的另一个回答:
http://zhidao.baidu.com/question/44499697.html

这个可以运行。
#include <stdio.h>
void fun(char *w , int m)
{ char s, *p1,*p2;
p1=w; p2=w+m-1;
while(p1<p2)
{s=*p1++;*(p1-1)=*p2--;*(p2+1)=s;}
}

main()
{ char a[15]="ABCDEFG";
fun(a,strlen(a));
puts(a);
}
xudi5566
2008-01-25 · TA获得超过126个赞
知道小有建树答主
回答量:220
采纳率:0%
帮助的人:265万
展开全部
这个程序有问题,运行有内存错误
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
狈让炮bpd96
2008-01-25 · TA获得超过4971个赞
知道大有可为答主
回答量:2451
采纳率:0%
帮助的人:2715万
展开全部
代码有问题
void fun(char *w , int m)
{ char s, *p1,*p2;
p1=w; p2=w+m-1:
while(p1<p2)
{s=*p1++;*p1=*p2++;*p2=s;}
}
m是字符串w的长度
当p2=w+m-1的时候,p2指向的是未知内存
打印出来的字符不可预知
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式