C语言中共用体怎么用?

2025-02-03 04:06:13
推荐回答(5个)
回答1:

共同体实现了使不同类型的变量存放到同一段内存单元中的需求。各个类型的在内存中占的字节数可以不同,但都从同一地址开始存放,采用了覆盖技术。先定义一个共同体变量如union result{ int i; char c;}a,b;引用:先定义共同体变量,注意不能引用共同体变量,只能引用共同体变量中的成员,例如:a.i(正确);a(错误)因为a是一个共同体变量,由共同体采用覆盖技术我们可以知道,a的存储区有好几种类型,占用不同长度的存储区,仅写共同体变量名a,难以使系统确定究竟是输出哪个成员。

回答2:

我测试了一下
int为32bit
,long为32位
,char为8位机测试。
分析得出这样的结果:

这正如共用结构体中
假如他们的共用首地址为0x10000000
那么

地址
变量

0x10000000:
a[0]
如果执行语句
s.a[0]=0x39

0x10000004:
a[1]
相差4个字节
那么会产生如下变化:

0x10000000:
b
a[0]=0x39
b[0]=0x39
c[0]=0x39(
字符c[0]="9")

0x10000000:
c[0]
如果再执行语句
s.a[1]=0x38

0x10000001:
c[1]
那么会产生如下变化:

0x10000002:
c[2]
a[1]=0x38

0x10000003:
c[3]
相差1个字节

也即是地址0x10000000到0x10000003中的数据为0x00000039

也即是地址0x10000004到0x10000007中的数据为0x00000038

虽然是共用体,但是a
b
c同用了一个地址
如果对a赋值了也同时对b和c赋值
只是数据类型不同而已。

如果从地址上来分析
c如果定义的是c[8],那么c[5]地址即为0x10000004
它的值就因该为0x38,因为和a[1]的地址相同。

查看b的是后可以直接用%d来查看
因为在本机上也是32bit和int相同

回答3:

共用体在同一时间只能使用其中一个成员的它的存储类型是覆盖存储的当做中间变量比较合适。省存储空间

回答4:

直接定义成String就行了

回答5:

分开定义如何?