C语言的问题
10.5 以下程序的输出结果是A)GFEDCBA B) AGADAGA C) AGAAGAG D) GAGGAGA#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);}答案: C 怎么算的
参考答案:开始:
ABCDEFG,p1指向A,p2指向G;
s=*p1++:
s='A',然后p1指向'B';
*p1=*p2--:
'B'被'G'覆盖,然后p2指向F,字符串变成AGCDEFG;
*p2=s:
'F'被'A'覆盖,字符串变成AGCDEAG;
s=*p1++:
s='G',然后p1指向'C';
*p1=*p2--:
'C'被'A'覆盖,然后p2指向'E',字符串变成AGADEAG;
*p2=s;
'E'被'G'覆盖,字符串变成AGADGAG
s=*p1++;
s='A;,然后p1指向'D'
*p1=*p2--;
'A'被‘G’覆盖,然后p2也指向这个'G',字符串变成AGAGGAG
*p2=s
中间这个'G'又被'A'覆盖,字符串变成AGAAGAG
此时p1,p2相同,结束循环,字符串是AGAAGAG