这个程序的运行结果怎么看都是选B?但为什么答案是选D呢?

#include

#include

#include

struct stu

{

char  *name, gender;

int  score;

};

main()

{

struct stu  a= {NULL, 'm', 290}, b;

a.name=(char *)malloc(10);

strcpy(a.name, "Zhao");

b = a;

b.gender = 'f';

b.score = 350;

strcpy(b.name, "Qian");

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

name 是指针,指向内存地址,a,b的那么是指向同一个地址的,name被b修改后,a的name也跟b的name一样。其他两个是具体的值,a,b的值不一样。
关注一下值和引用的区别。

居然问了118个问题了,提问冠军啊
b=a使得b和a指向同一块内存空间,那么用b修改内存空间数据,用a访问的就是被修改过的数据
所以
strcpy(b.name, "Qian");之后,a.name也是Qian了