选择题
有下列程序:
#include<stdio.h>
#include<string.h>
typedef struct stu{
char name[9];
char gender;
int score;
}STU;
void f(STU *a)
{STU c={'Sun','f,,90},*d=&c;
a=d;
strcpy(a->name,c.name);
a->gender=c.gender;
a->score=c.score:
printf('%s,%c,%d,',a->name,a->gender,a->score);
}
main()
{STU a={'Zhao','m',85};
f(&a);
printf('%s,%c,%d',a.name,a.gender,a.score);
}
程序执行后的输出结果是______。
【正确答案】
C
【答案解析】程序首先使用typedef定义一种新的类型名STU,它包含3个数据成员:字符数组name、字符变量gender和整数score。main()函数使用STU定义结构体变量a并赋初值;再调用函数f(&a),将a的地址传入。函数f()的参数是STU类型的指针,所以形参a是实参&a的一个拷贝,此时形参a指向实参a。f()函数使用STU定义结构体变量c并赋初值,同时定义了STU类型的指针变量d,初值为c的地址,然后将d的值赋给形参a,此时形参a指向c,而实参a的地址&a没有改变;接着f()函数通过逐个引用成员变量将c的各个成员值赋给a指向的结构体变量(由于形参a指向c,赋值操作也就是c赋给自身而已),其中使用strcpy进行字符串拷贝;实参a的地址&a没有改变,所以实参a的值也就没有改变;输出形参a指向的结构体数据,其实也就是输出c的值。f()函数执行完后,main()函数中a的值不变,输出的值也就是实参a的值。故本题答案为C选项。