C语言 请问这道题怎么做

如题所述

Fun(a,strlen(a));
p1=w;p2=w+m-1;//字符串的启示地址赋给p1,也就是p1指向字符串的开始,即*p1='A',w+m-1是在字符串w的起始位置偏移7-1个字符,也就是指向字符串的结尾,即*p2='G';
整个程序的执行顺序如下:
开始p1指向开始,p2指向末尾;p1的地址小于p2的时候执行while循环;
s=*p1++;按照优先级,先将*p1赋值给s,即s='A',p1再向前移一个字节,指向B。
*p1=*p2--;同样的道理,按照优先级,*p2指向的值'G'先赋值给*p1,此时*p1就是G,p2--后p2指向F。
*p2=s;这句的意思是将s=‘A’的值赋给p2指向的内存单元,也就是将'F'擦除,写入'A',
所以第一轮循环后字符串变为 AGCDEAG,此时p1指向第二个字符,p2指向倒数第二个字符;
第二轮循环如下:
p1指向第二个字符G,p2指向倒数第二个字符A;
s=*p1++;按照优先级,先将*p1赋值给s,即s='G',p1再向前移一个字节,指向C。
*p1=*p2--;同样的道理,按照优先级,*p2指向的值'A'先赋值给*p1,此时*p1就是A,p2--后p2指向E。
*p2=s;这句的意思是将s=‘G’的值赋给p2指向的内存单元,也就是将'E'擦除,写入'G',
所以这轮循环结束后字符串为AGADGAG,此时p1指向第三个字符A,p2指向倒数第三个字符G
进入第三轮循环
p1指向第三个字符A,p2指向倒数第三个字符G;
s=*p1++;按照优先级,先将*p1赋值给s,即s='A',p1再向前移一个字节,指向D。
*p1=*p2--;同样的道理,按照优先级,*p2指向的值'G'先赋值给*p1,此时*p1就是G,p2--后p2指向D。
*p2=s;这句的意思是将s=‘A’的值赋给p2指向的内存单元,也就是将'G'擦除,写入'A',
所以这轮循环结束后字符串为AGAAGAG,此时p1指向第四个字符A,p2指向倒数第四个字符A
进入下轮的时候判断p1不小于p2,推出循环,最终的字符串是AGAAGAG
温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-08-09
这个程序其实不难。就是把字符串s和他的串长传递到函数中,然后执行一次函数就可以了。在这个函数中,有两个指针p1指向串首字符,p2指向串尾字符。然后循环的条件是p1在p2之前。认真地模拟一遍程序的执行,看清楚每一轮循环体所做的事情。其实,循环体执行一遍所得的效果,就是把p1指向的字符,复制到p2的前一个位置。然后再将p2指向的字符,复制到p1的后一个位置。然后p1后移一位,p2前移一位。这样的循环体总共执行三次。所以最后选择的正确答案是答案C。本回答被提问者采纳
第2个回答  2019-11-10
我问的是怎么做?
相似回答