c语言编程问题,我搞不明白,请高手指教一下!

2025-03-06 17:57:52
推荐回答(4个)
回答1:

#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);
}

回答2:

s=*p1++;执行后p1已经指向下一个字符了,同理 *p1=*p2--执行后p2已经指向前一个字符了。

回答3:

s=*p1++; *p1=*p2--; *p2=s;问题就是这3句代码,s=*p1++,应该是先复制再自加,而然后接着执行*p1=*p2--,就已经出问题了,互换的位置就不对等 了,此时的p1必然是第二个,所以输出时第一个肯定是A,建议你一步一步写。。

回答4:

这个不知道哦