有如下程序void f(int *x int *y){ int t; t=*x;*x=*y;*y=t;}main(){ int a[6]={1 2 4 6 8 10} i
程序
已帮助 人
有如下程序void f(int *x,int *y){ int t; t=*x;*x=*y;*y=t;}main(){ int a[6]={1,2,4,6,8,10},i,*p,*q; p=a;q=&a[5]; while(p<q) { f(p,q); p++; q--; } for(i=0;i<6;i++) printf("%d,",a[i]);}该程序的输出结果是A.1,2,4,6,8,10 B.10,8,4,6,2,1C.10,8,6,4,2,1 D.10,2,4,6,8,1
-
参考答案:C题目中给出的程序分为两个部分:主函数main和函数f。在主函数中初始化定义了一个整型数组a,大小为6,并定义了两个数组指针p,q。指针p指向数组第一个元素的地址,指针q指向数组最后一个元素的地址。主函数包含一个while语句,循环条件为p<q,while语句内部先调用了f函数,p、q指针为该函数的实参,随后进行了p++操作和q--,即使p指针指向下一个元素的地址,q指针指向前一个元素的地址。由于是数组存储,必然存在初始时,有p<q,当p>=q时,while语句结束。while语句后面是for语句,该语句的作用是输出数组a[]中所有的数据。f函数的形参为整型指针,函数的功能是使得输入的指针变量所指向的数据进行交换,由于使用的是指针变量,故在f函数中对指针的操作结果会影响调用函数中(main)实参所指数据的改变,题目中f函数的调用实质是将main函数中的p、q指针所指的数据进行交换,也将导致数组a中相应的数据进行交换。结合while语句,也就是将数组a中的第1个数据与第6个数据进行交换,第2个数据与第5个数据进行交换,以此类推,得到结果10,8,6,4,2,1。
