全部问题 > 当前问题

第6题看不懂

小迷糊 2015-9-8 22:41:40

共 2 个回答

最佳答案

匿名课官 2015-9-8 22:57:51

1.p1=w,w里是数组a的1首地址,所以p1里面就是数组a的首地址了

2.p2=w+m-1里是数组a的最后一个数字6的地址

3.p1<p2,x=*p1;*p1=*p2;*p2=x;p1++,p2--;就是p1的地址往后移动p2的地址往前移动并交互数字,直到p1=4,p2=3交换之后,条件终止

嘿嘿大人 2015-9-9 09:05:51

这个函数是按地址传递的,因为形参是指针,

 这个语句 {x=*p1;*p1=*p2;*p2=x;}

在前面学过很多次,它的作用是交换p1和p2所指向空间的元素;

p1++;p2--;的作用是交换完成后p1的指针往后移动,p2的指针往前移动,由此可看出这个指针是从两头向中间移动;

  while(p1<p2) 加上这个p1<p2的作用就是给循环设置一个出口,意思是当交换了所有的元素后就跳出循环;

所以我们得知这个函数的作用就是把后面的元素放到前面来,就是字符串的一个逆置作用

有以下程序
#include <stdio.h>
#include <string.h>
void fun(char *w,int m)
{ char x,*p1,*p2;
  p1=w;p2=w+m-1;
  while(p1<p2) {x=*p1;*p1=*p2;*p2=x;p1++;p2--;}
}
main()
{ char a[]="123456";
  fun(a,strlen(a));puts(a);
}
程序运行后的输出结果是 ______ 。
A. 654321
B. 116611
C. 161616
D. 123456
答案:A
解析:fun(a,strlen(a));可以看出传递的是地址,形参可以改变实参,fun函数的功能是逆置字符串。所以结果是654321。因此选A。