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

#include <stdio.h>
#include <string.h>
void fun(char *w,int n)
{
char t,*s1,*s2;
s1=w;s2=w+n-1;
while(s1<s2) {t=*s1++;*s1=*s2--;*s2=t;}
}
void main()
{
char *p;
p="1234567";
fun(p,strlen(p));
puts(p);
}如何运行,结果是多少?最好有详细步骤

有三次循环的过程。fun函数在s1<s2时,将指针s1指向的值取出送t,然后指针加1,再将s2指向的值取出,送加1后的s1指向的地址,最后将t中内容,即原来s1所指向内容送减1后的s2指向地址。一共循环执行三次。

第1次循环:
t='1' ,s1指向第二位数所在地址,内容变成'7’,s2指向倒数第二位数,内容变成 ‘1’,整个字符串变为“1734517”

第2次循环:
t='7' ,s1指向第三位数所在地址,内容变成'1’,s2指向倒数第三位数,内容变成 ‘7’,整个字符串变为“1714717”

第3次循环:
t='1' ,s1指向第四位数所在地址,内容变成'1’,s2指向倒数第四位数,也即正数第四位数,内容变成 ‘1’,整个字符串变为“1711717”

最终结果为1711717

不过好像有答案写说主函数中应改成char p[8]="1234567",原因是p="1234567" 定义的话p指向的是个字符串常量,没办法修改常量。好像有道理,我没有上机运行。你自己改了试试看。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-12-23
程序有问题,但算法如下,它是把字符串p进行反串输出7654321
void fun(char *w,int n)
{
char t,*s1,*s2;
s1=w;s2=w+n-1; //s1为左边指针,s2为右边指针
while(s1<s2) {t=*s1++;*s1=*s2--;*s2=t;} 交换之后 s1+1,s2-1,一直到s1>=s2为止
}本回答被提问者采纳
第2个回答  2010-12-23
有问题 运行出错本回答被网友采纳
相似回答