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

admin2020-03-15  10

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

答案A

解析 本题考查指向指针的指针。函数f()中,语句"s=&t;"将s指向了指针t的地址,即*s与t等价,而语句"*s=&m;"相当于"t=&m",即将指针t指向了变量m的地址,所以在函数f()中输出结果为7,5,5。主函数中,i是int类型的变量,p为基本类型为int的指针变量,r为二级指针,语句"i=3,*p=&i, **r = &p;"使得*p、**r、i三者等价。函数f()以二级指针r作为实参,内部重新改变了形参s的指向后再进行操作,由于形参只是实参的一个副本,形参指针指向的变化不会影响到实参指针的指向,所以实参r的指向没有变化,输出结果为3,3,3,答案选A。
转载请注明原文地址:https://jikaoti.com/ti/SBG0FFFM
0

最新回复(0)