问题 单项选择题

有以下程序:#includestruct STU{charname[10];intnum;};void f(char*name,intnum){ struct STUs[2]={{"SunDan",20044},{"Penghua",20045}};num=s[0].num;strcpy(name,s[0].name);}main(){ struct STUs[2]={{"YangSan",20041},{"LiSiGao",20042}},*p;p=&s[1];f(p->name,p->num);printf("%s%d\n",p->name,p->num);}程序运行后的输出结果是______。

A.SunDan 20042

B.SunDan 20044

C.LiSiGuo 20042

D.YangSan 20041

答案

参考答案:A

解析:本题主函数中定义了结构体类型的指针变量 p,并使其指向了结构体类型的数组 s[1],并通过调用函数 f 改变了指针变量 p 所指向的结构体中成员变量 name 的值,但并未改变其 num 的值。这是因为函数 f 中的形参 name 是一个字符型指针变量,它指向了主函数中指针变量 p 所指向的结构体的成员变量 name, 所以对函数 f 中的形参*name 的改变也就是对主函数中 p->name 的改变,而函数 f 中对形参 num 的改变并 不会影响主函数中 p->num 的值,因为此时传递给 num 的是一个值,而不是地址。

选择题
多项选择题