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

admin2015-07-28  24

问题 有以下程序
#include
int *f(int *s,int *t)
{ if (*s < *t)
s=t;
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,5,5
C、5,3,3,3,5
D、5,5,5,5,5

答案A

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

最新回复(0)