若有以下程序 #include int k=7; void f(int **s) { int *t=&k; *s=t; printf("%d,%d,%d,", k, *t, **s); } main() { int i=3,*p=&i, **r = &

admin2015-07-28  35

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

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

答案A

解析 本题考查指向指针的指针。i是int类型的变量,p为基本类型为int的指针变量,r为二级指针,指向的是指针p的地址,因此,*p就代表i;**r就代表*p,也等价于i。二级指针作为函数参数,形参和实参指向同一个地址空间,两者的改变保持同步。函数fun()的功能是将r指向的存有变量i的地址的指针变量改为指向存有变量k的地址的指针变量,*p的值发生了改变。函数f()中语句"int *t=&k;*s=t;"同样使得**s、*t、k等价,所以刚开始输出3个7,函数调用结束之后*p与**r的值均为7,i不变,答案选A。
转载请注明原文地址:https://kaotiyun.com/show/b7Jp777K
0

最新回复(0)