为了账号安全,请及时绑定邮箱和手机立即绑定

不知道这么晚了还有木有然帮我看一下

不知道这么晚了还有木有然帮我看一下

C C# C++
kathria 2017-03-24 21:32:36
#include  <string.h>void  fun( char *s, int m1, int m2 ){  char  t, *p;   p=s + m1;  s= s+m2;   while( s<p )   {  t=*s;  *s=*p;  *p=t;       s++;   p--;   }}main(){   char  ss[10]="012345678";    int  n=6;    fun( ss,0,n-1 );    fun( ss,9,n );    fun( ss,0,9 );    printf("%s\n", ss );}程序运行后的输出结果是A)  012345B)  876543210C)  876543D)  012345678没动这个结果怎么出来的  答案是A
查看完整描述

2 回答

已采纳
?
asd8532

TA贡献143条经验 获得超187个赞

首先理解fun的意义

fun(s,m1,m2);//从s的m1位置到m2位置对调

 fun( ss,0,n-1 ); //0<n-1所以fun的while为假,不执行

  fun( ss,9,n );;//0 1 2 3 4 5 6 7 8 /0共10,9到6的位置对调变成0 1 2 3 4 5 /0 8 7 6  而/0是终止符号,所以输出到5的时候就停止了

    fun( ss,0,9 );//0<9所以fun的while为假,不执行


查看完整回答
1 反对 回复 2017-03-24
?
望远

TA贡献1017条经验 获得超1032个赞

这里一共有10个字符,最后有一个'\0',第一个和第三个fun函数因为不满足while条件直接跳出,只有第二个fun函数改变了字符串,它的作用是让第7-10个字符逆置,所以\0在第7个字符,输出的时候输出了012345六个字符。
查看完整回答
反对 回复 2017-03-24
  • kathria
    kathria
    你说的十个字符包涵&#039;\0&#039;吗?你说的十个还是只是s[10]这个里面的十。为什么第一个跳出循环了。地址往后移了5个。不应该指到4了吗?前面不是指的数字是0吗
  • 望远
    望远
    就是加上\0一共有10个字符,所以数组下标并没有越界,合法,虽然第一个fun函数确实让两个指针指向了0和4,但是while条件不成立,并没有改动字符串,同理第三个fub函数。
  • kathria
    kathria
    我懂了谢谢了。刚才理解错了
  • 2 回答
  • 0 关注
  • 1718 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信