c语言共用体内存共用问题,为什么和理解的不一样,求解答,谢谢

冬末-gentle 2019-04-14 09:30:06
#include<stdio.h>

union info
{
char stu1;
char stu2;
char stu3;
}*info1,info2,info3,*info4;


void main()
{

info1=&info3;
info4=&info2;
//info1->stu1='t';
info2.stu2='a';
info1->stu2='b';
info2.stu2='c';
info4->stu2='d';
printf("%c\n",info3.stu2);
printf("%c\n",info1->stu2);
printf("%c\n",info2.stu3);
printf("%c\n",info4->stu2);
}

论坛的大神们帮帮忙解析下这个程序,为什么输出回事
b
d
不应该都是d吗
是哪个环节出了问题
...全文
210 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 5 楼 qybao 的回复:
楼上的,你睁大眼睛看清楚的意思
不是两个不同的联合体变量(例子里是info2,info3,这是两个变量)共用一块内存
好吧,看错,向你道歉,中文歧义多
qybao 2019-04-15
  • 打赏
  • 举报
回复
楼上的,你睁大眼睛看清楚的意思
不是两个不同的联合体变量(例子里是info2,info3,这是两个变量)共用一块内存
  • 打赏
  • 举报
回复
引用 3 楼 qybao 的回复:
联合体是里面的字段(例子里是stu1,stu2,stu3,这是联合体的字段)共用一块内存,不是两个不同的联合体变量(例子里是info2,info3,这是两个变量)共用一块内存。好好区别一下联合体的字段和联合体变量
先不看变量类型,只要是2个分别定义的变量(int a;int b),他们就互不干扰,各自占用自己的内容,只是现在变量类型是共用体而已,这就转不过来。不要误人子弟
qybao 2019-04-14
  • 打赏
  • 举报
回复
联合体是里面的字段(例子里是stu1,stu2,stu3,这是联合体的字段)共用一块内存,不是两个不同的联合体变量(例子里是info2,info3,这是两个变量)共用一块内存。好好区别一下联合体的字段和联合体变量
  • 打赏
  • 举报
回复
info2和info3不是同一个变量,你操作info2不会影响info3,输出bbdd
puthon 2019-04-14
  • 打赏
  • 举报
回复
我的理解是共用体共用的内存是内部变量共用同一段内存,比如info2.stu2='a';那么info2这个联合体内的所有数据都共用一段数据,也就说stu1='a'、stu2='a'、stu3='a' 而在你的代码里info2和info4是两个联合体的实例,也就说他们是不同的联合体(当然联合体指针*info1和*info3也就不一样的啦),所以才会出现你所运行的效果。 为了验证这一点,你可以把info1和info3的内存地址打印出来看一下,肯定是不一样的。 下面是我电脑上的结果:

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧