以下程序的输出结果是什么,解释一下,不懂
voidfun(char*w,intm){chars,*p1,*p2;p1=w;p2=w+m-1:while(p1<p2){s=*p1++;*p1=*p2++;*p2=s...
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);
} 展开
{ 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);
} 展开
3个回答
展开全部
如果按照你的程序,排除语法错误后,那输出结果是:什么也没有!
知道为什么吗?因为有个死循环!
p1=w; p2=w+m-1;
while(p1<p2)
{s=*p1++;*p1=*p2++;*p2=s;}
}
首先p1指向了字符串w的首元素,p2指向尾元素。此时显然有p1<p2,好,进入循环。随后不断有*p1++和*p2++,也就是说p1和p2都向后移动一位,此后p1<p2永远成立!因为p2-p1是定值等于m-1。
根据你的程序,我估计是想让char a[]="ABCDEFG";首尾对调变成"GFEDCBA"吧?
我帮你改好了
s=*p1++;*p1=*p2++;*p2=s;
改成
s=*p1++;*(p1-1)=*p2--;*(p2+1)=s;
输出结果就是"GFEDCBA"。具体为什么,参看我的另一个回答:
http://zhidao.baidu.com/question/44499697.html
这个可以运行。
#include <stdio.h>
void fun(char *w , int m)
{ char s, *p1,*p2;
p1=w; p2=w+m-1;
while(p1<p2)
{s=*p1++;*(p1-1)=*p2--;*(p2+1)=s;}
}
main()
{ char a[15]="ABCDEFG";
fun(a,strlen(a));
puts(a);
}
知道为什么吗?因为有个死循环!
p1=w; p2=w+m-1;
while(p1<p2)
{s=*p1++;*p1=*p2++;*p2=s;}
}
首先p1指向了字符串w的首元素,p2指向尾元素。此时显然有p1<p2,好,进入循环。随后不断有*p1++和*p2++,也就是说p1和p2都向后移动一位,此后p1<p2永远成立!因为p2-p1是定值等于m-1。
根据你的程序,我估计是想让char a[]="ABCDEFG";首尾对调变成"GFEDCBA"吧?
我帮你改好了
s=*p1++;*p1=*p2++;*p2=s;
改成
s=*p1++;*(p1-1)=*p2--;*(p2+1)=s;
输出结果就是"GFEDCBA"。具体为什么,参看我的另一个回答:
http://zhidao.baidu.com/question/44499697.html
这个可以运行。
#include <stdio.h>
void fun(char *w , int m)
{ char s, *p1,*p2;
p1=w; p2=w+m-1;
while(p1<p2)
{s=*p1++;*(p1-1)=*p2--;*(p2+1)=s;}
}
main()
{ char a[15]="ABCDEFG";
fun(a,strlen(a));
puts(a);
}
展开全部
这个程序有问题,运行有内存错误
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
代码有问题
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;}
}
m是字符串w的长度
当p2=w+m-1的时候,p2指向的是未知内存
打印出来的字符不可预知
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;}
}
m是字符串w的长度
当p2=w+m-1的时候,p2指向的是未知内存
打印出来的字符不可预知
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询