您当前的位置:首页 > 互联网教程

关于C语言联合体的问题

发布时间:2025-05-18 03:05:58    发布人:远客网络

关于C语言联合体的问题

一、关于C语言联合体的问题

union是所有的变量共用同一块内存。其大小就是其包含的变量中最大的数据类型。

本题中应该是4B,也就是int的大小。

当执行a.x[0]= 10; a.x[1]= 1;时,存储形式是000100001010(其长度应该是32,省略前面的0)

其中的0001就是a.x[0]中的十位数字1,一次类推。

当你输出a.i时,程序就把000100001010当成int型输出。

二进制的0000100001010就是266。

这是我根据答案推测的,不知道对不对。

二、C语言联合体和结构体中变量所占内存

1、union U两个成员变量,一个字符数组st占4个字节,一个整型i占4个字节,所以两者共用4个字节,union U占4字节。

2、struct A两个成员变量,一个整型c占4个字节,一个union U类型的u,也占4个字节。所以struct A的大小为两者之和,4+4=8字节。

3、注,因为这些成员变量都是4字节大小,所以不用考虑字节补齐等因素。

三、关于c语言共用体的问题

1、int型的变量占2个字节,而一个内存单元只有一个字节的大小,因此int型变量要分开放。

2、那怎么放呢?是这样的,先把int变量分成两个字节,前八位作为高字节,后八位作为低字节,这样,把高字节的那八位放在低地址内存单元,低字节的那八位放在高地址内存单元。

3、而long型的占四个字节,也是一样的,分成四个字节分开放,高字节放低地址内存单元。

4、你的程序中,只占一个字节的0x39给了int型的i[0],那这样,高字节为0,假设放在最低地址的内存单元中,那0x39就顺着往上放,i[1]也一样。好了,这样放完后,这个占四个字节的共用体变量的存储情况就是:0x38/0x00/0x39/0x00(说明:左手边为高地址,右手边为低地址)。

5、好了,我们现在是取long型的k,那很显然,低地址的存储单元是它的高字节,高地址的存储单元是它的低字节,这样就得到:0x00390038。

6、这是我用keil-C51仿真得到的结果,如果你问为什么结果跟你的不一样,那我只能回答:系统决定变量的存放方式。



相关内容FAQs: