c语言 指针问题,求详细解,求过程

#include<stdio.h>#include<string.h>voidfun(char*w,intm){chars,*p1,*p2;p1=w;p2=w+m-1;w... #include<stdio.h>
#include<string.h>
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);
}
程序运行后的输出结果
展开
 我来答
_cyoumuyou
2011-08-03
知道答主
回答量:14
采纳率:0%
帮助的人:0
展开全部
答案: AGAAGAG
详细过程:
首先要明白虽然++的优先级要高于* 但由于是p1++而非++p1所以p1先使用后变化。故s=*p1++;相当于s=*p1;p1++;同理*p1=*p2--;也不难理解。
那接下来看while循环,首先明确告诉,循环了三次。
第一次:
p1指向“ABCDEFG"的第一位,p2指向最后一位,这因该没问题吧,
接下来,显然满足p1<p2;进入循环按照上面所说理解 s=*p1++;*p1=*p2--;(s=A;p1指向第二 位,p2指向第6位);实现将第二位的B换为第七位的G,第六位的F换为A(*p2=s);并让p2指向第6位,因此字符串变为AGCDEAG;(是不是自己有点罗嗦了,哈哈)
第二次:
此时p1,p2,分别指向2,6位对吧,显然仍满足循环,同理将实现第三位第五位分别变为A,G;p1再右移一位,p2,左移一位;此时字符串为AGADGAG;对吧。
第三次:
这次由于p1,p2,分别向右,向左移动一位,p1,p2指向同一位置,这下就有意思了;
首先第五位变为G(*p1=*p2--;),然后又变为A(*p2=s);哈哈,终于完了;
由于p1=p2,循环终止。输出a,即AGAAGAG

相信你定明白。
呜呜~打字不容易啊
AIR_IT
2011-08-03 · TA获得超过183个赞
知道答主
回答量:277
采纳率:100%
帮助的人:162万
展开全部
首先长度是7然后p1指向了 数组的开始 P2指向了最后一个元素
由于++的优先级要高于* 所以指针先++ 但是结果却不变 因为这条语句还没有结束呢
然后取内容 也就是G 所以s = A;然后 p1指向了B这个元素.
由于P2也是先-- 然后取内容 所以P1此时应该是G了 而P2--之后指向了F这个元素
然后反复执行这个循环
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式