第6题看不懂
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交换之后,条件终止
这个函数是按地址传递的,因为形参是指针,
这个语句 {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。