请教这道题的答案是怎么出来的?

来源:百度知道 编辑:UC知道 时间:2024/06/08 02:11:05
下面程序的运行结果是?()

#include <stdio.h>
#include <string.h>
fun(char *w,int n)
{
char t,*s1,*s2;
s1=w;s2=w+n-1;
while(s1<s2) {t=*s1++;*s1=*s2--;*s2=t;}
}

main()
{ char *p;
p="1234567";
fun(p,strlen(p));
puts(p);
}

A.7654321 B.1714171 C.1711717 D.7177171

答案是C,可我做出来是A答案,C答案怎么出来的??

while(s1<s2)
{
t=*s1++;
*s1=*s2--;
*s2=t;
}
注意t=*s1++;的意思是当前的s1指向的字符赋给t后s1就变为指向下一个字符了。执行*s1=*s2--;时的s1是上一条语句中s1++之后的值。
理解这个误区之后我想你已经明白了吧。呵呵~~~