有以下程序 #include typedef struct stu { char name[10]; char gender; int score; } STU; void f(STU *a, STU *b) { b = a; printf("%s,%

admin2019-07-14  30

问题 有以下程序
#include
typedef struct stu {
char name[10];
char gender;
int score;
} STU;
void f(STU *a, STU *b)
{ b = a;
printf("%s,%c,%d,", b->name, b->gender, b->score);
}
main()
{ STU a={"Zhao", ’m’, 290}, b={"Qian", ’f’, 350};
f(&a,&b);
printf("%s,%c,%d\n", b.name, b.gender, b.score);
}
程序的运行结果是( )。

选项 A、Zhao,m,290,Qian,f,350
B、Qian,f,350,Zhao,m,290
C、Qian,f,350,Qian,f,350
D、Zhao,m,290,Zhao,m,290

答案A

解析 函数f()虽然为地址传参,但是形参只是实参的一个副本,若形参和实参为地址,则形参指针指向的变化不能影响到实参指针的指向,所以该函数不能改变&b的值,也不能改变b中的值,所以在函数f()内,语句"b = a;"将当前b的指针指向a指向的结构体变量内存空间,所以输出结果为"Zhao,m,290,",但是主函数中b的值没有改变,输出结果为"Qian,f,350",答案选A。
转载请注明原文地址:https://kaotiyun.com/show/i8Rp777K
0

最新回复(0)