关于c语言指针问题{ s=*p1++;*p1=*p2--;*p2=s; }

#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);
}
每次循环详细讲解,特别是{ s=*p1++;*p1=*p2--;*p2=s; } ,谢了……

首先P1=A P2=G S=0;
第一次执行:S=A P1=G P2=A P1指针位置加1.P2指针位置减1.相当于a[]=“AGCDEAG”
第二次执行执行相应的动作,当P1,P2指向同一位置跳出while
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-06-29
s=*p1++;*p1=*p2--;*p2=s;
变量值得增加 后赋值 *p1++ p2--是循环 变量 来结束循环的本回答被网友采纳
第2个回答  2012-07-14
{ s=*p1++;*p1=*p2--;*p2=s; } 可以改为{s=*p1;*p1=*p2;*p2=s;p1++;p2--;}
第3个回答  2012-06-29
AGAAGAG
注意++和--是先引用再自增或自减
第4个回答  2012-06-29
第一次while(p1<p2) 时 *p1 = 'A', *p2 = 'B'
所以 s= 'A' , 然后 ‘B' 被替换成’G‘, 然后'F'被替换成’A‘,
依次类推。追问

详细点ok?谢

相似回答