c语言中的共用体

c语言中的共用体,第1张

我测试了一下

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相同

十六进制的0x39表示的是十进制的57,而ASCII代码为57的值代表的是字符9,所以当printf以%c格式输出时,为字符'9',,而共用体长度为4,定义i[]数组时数据没有被覆盖,如果在s->i[0]=0x39s->i[1]=0x38后加上 s->k=70则输出为F,因为共用体的性质,s->c[0]的值变为70,而ASCII代码为70的值代表的是字符F,---------这样说清楚不?


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11084019.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-13
下一篇 2023-05-13

发表评论

登录后才能评论

评论列表(0条)

保存