若有以下程序 #include #include #include typedef struct stu { char *name, gender; int score; } STU; void f(char *p) { p=(char *)m

admin2020-11-23  22

问题 若有以下程序
#include
#include
#include
typedef struct stu {
char *name, gender;
int score;
} STU;
void f(char *p)
{
p=(char *)malloc(10);
strcpy(p, "Qian");
}
main()
{
STU a={NULL, ’m’, 290}, b;
a.name=(char *)malloc(10);
strcpy( a.name, "Zhao" );
b = a;
f(b.name);
b.gender = ’f’; b.score = 350;
printf("%s,%c,%d,", a.name, a.gender, a.score);
printf("%s,%c,%d\n", b.name, b.gender, b.score);
}
则程序的输出结果是( )。

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

答案A

解析 语句"b=a;"把结构体a中的数据赋值给b,由于结构体的name成员为一指针变量,所以b.name和a.name指向同一块内存地址,调用函数f(b.name)后,形参指针指向的变化不能改变实参指针指向的变化,所以b.name和a.name的仍然相同,值均为"Zhao",所以最终结构体变量a的数据为{"Zhao",?m?,290},b中的数据为{"Zhao", ?f?,350}。
转载请注明原文地址:https://kaotiyun.com/show/YN3p777K
0

最新回复(0)