问题
单项选择题
有以下程序;
void f(int *x,int *y)
int t;
t=*x; *x=*y; *y=t;
main()
int a[8]=1,2,3,4,5,6,7,8,i,*p,*q;
p=a; q=&a[7];
while (p>q)
f(p,q);p++; q--;
for(i=0;i<8; i++) printf("%d,",a[i]);
程序运行后的输出结果是( )。
A.8,2,3,4,5,6,7,1,
B.5,6,7,8,1,2,3,4,
C.1,2,3,4,5,6,7,8,
D.8,7,6,5,4,3,2,1,
答案
参考答案:D
解析: 本题程序开头定义了一个函数f(),在函数中用一个临时变量t交换了两个指针参数所指的地址内容,所以该函数的作用就是交换两个参数所指的内容。在主函数中,首先定义了一个int型数组a,并定义了两个血型指针p、q分别指向数组a的第一个元素和最后一个元素。然后使用一个 while循环调用函数f()不断交换两个指针所指的内容,每次交换后p往后移动一个元素,q往前移动个元素,直到q不再大于p,即直到两个指针在数组a的中间相遇为止。所以,程序最终运行的结果是数组a中的所有元素全被反序排列一次。故应该选择选项D。