我觉得这题应该选B,可是为什么结果是D呢?想不通
展开全部
至于原因的话,关键是在这句话:
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指向同一个地址吗?还是有别的情况呢?
追答
如果等号两边都是指针变量,并且右边的已经正确赋值,那么执行赋值语句后,两个指针变量都指向右边那个指针原来指向的位置。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询