#include
#include
void fun( char *w, int m)
{
char s, *p1, *p2;
p1=w; //p1指向串首第一个字符
p2=w+m-1; //p2指向最后一个有效字符,串尾
while (p1=p2时,相遇
{
s=*p1++; //先将p1中的内容存储到s,然后,p1指向了其一下个
*p1=*p2--; //将p2中的内容存储到p1指向的位置,然后p2向前移动,指向了前一个位置
*p2=s;//再将原p1中的内容s,存储到当前p2指向的位置
}
}
根据以上说明,可以看出
ABCDEFG
开始:*p1='A' *p2='G'
循环第一次,
s=*p1++; s='A' . p1指向'B'所在位置,
*p1=*p2--; 将‘B'换成了'G',p2指向了'F'位置 即:*p1='G'
*p2=s; 将'F'换成了‘A’ 即:*p2='A'
第二次
s=*p1++; s='G' . p1指向'C'所在位置,
*p1=*p2--; 将‘C'换成了'A',p2指向了'E'位置
*p2=s; 将'E'换成了‘G’
继续循环下去,就变成了AGAAGAG这样的排列了
main()
{
char a[]="ABCDEFG";
fun( a, strlen(a));
puts(a);
}
s=*p1++;执行后p1已经指向下一个字符了,同理 *p1=*p2--执行后p2已经指向前一个字符了。
s=*p1++; *p1=*p2--; *p2=s;问题就是这3句代码,s=*p1++,应该是先复制再自加,而然后接着执行*p1=*p2--,就已经出问题了,互换的位置就不对等 了,此时的p1必然是第二个,所以输出时第一个肯定是A,建议你一步一步写。。
这个不知道哦