若有以下程序 #include int *f(int *s,int *t) { int *k; if (*s < *t){ k = s; s=t; t=k; } return s; } main() { int i=3, j=5, *p=&i, *q=&

admin2019-08-10  25

问题 若有以下程序
#include
int *f(int *s,int *t)
{ int *k;
if (*s < *t){ k = s; s=t; t=k; }
return s;
}
main()
{ int i=3, j=5, *p=&i, *q=&j, *r;
r=f(p,q); printf("%d,%d,%d,%d,%d\n", i, j, *p, *q, *r);
}
则程序的输出结果是( )。

选项 A、3,5,3,5,5
B、3,5,5,3,5
C、5,3,5,3,5
D、5,3,3,5,5

答案A

解析 考查指针与函数。被调函数为指针型函数,返回的是s这一指针型数据。虽然该函数进行的是地址传参,但只是改变了指针的指向,对原指向的数据并没有改变。并且若以指针作为操作单元,不涉及其指向的数据时,该函数仍然可以看做是值传递,即形参指针指向的变化不会影响到实参指针的指向。if语句将s指向*s、*t较大的数据的地址并返回。所以函数调用结束之后,i、j值不变,p的指向不变,r的指向和q的指向一致,输出结果为:3,5,3,5,5,答案选A。
转载请注明原文地址:https://kaotiyun.com/show/wMRp777K
0

最新回复(0)