我觉得这题应该选B,可是为什么结果是D呢?想不通

 我来答
帐号已注销
2015-03-13 · TA获得超过1134个赞
知道小有建树答主
回答量:742
采纳率:73%
帮助的人:418万
展开全部


至于原因的话,关键是在这句话:

b=a;

因为结构体中的第一个成员变量是地址,当执行结构体对象的直接赋值的时候,是结构体中每一个成员分别直接赋值,说简单点b=a就相当于  b.name=a.name;b.gender=a.gender;b.score=a.score;

后面两个是变量就不说了,第一个name是char类型的指针,当指针作为等号的左值的时候,是直接把后面那个指针指向的地址直接交给前面那个指针。因此,此时a.name和b.name指向内存中同一个地方。然后你将Qian赋值给b.name指向的内存空间,当然a.name也是指向这个空间的。所以a.name和b.name的输出结果一个。


你还可以试试,在程序最后return 0;之前再加如下几句:

strcpy(a.name,"Sun");

printf("%s,%c,%d\n",b.name,b.gender,b.score);

这样的结果一定是 Sun,f,350   原因同上。

更多追问追答
追问
如果a,b都是指针变量,是a=b都是指a,b指向同一个地址吗?还是有别的情况呢?
追答
如果等号两边都是指针变量,并且右边的已经正确赋值,那么执行赋值语句后,两个指针变量都指向右边那个指针原来指向的位置。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式