选择题   有下列程序:
    #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选项。