typedef union { long i;int k[5];char c; }DATE; struct date {

yudaojian2022-10-04 11:39:541条回答

typedef union { long i;int k[5];char c; }DATE; struct date { int cat;DATE cow;double dog; }too;
typedef union
{
long i;int k[5];char c;
}DATE;
struct date
{
int cat;DATE cow;double dog;
}too;
DATE max;
main()
{
printf("%d",sizeof(struct date)+sizeof(max));
}
求详细解答

已提交,审核后显示!提交回复

共1条回复
真理之剑3 共回答了14个问题 | 采纳率100%
sizeof(max)是求max类型的大小,max的类型是union结构,在union结构中所有变量共用同一个空间,在这个union中,i占4 个字节,k[5] 占20个字节,c占1个字节,因为是共用同一个空间,所以union 的大小按最大的变量k[5]来算,占20个字节.
在struct date结构中,cat占4个字节,cow占20个字节,dog占8个字节,合起来就是32个字节.
sizeof(struct date)+sizeof(max) 等于20+32 等于52
1年前

相关推荐

typedef union { UBYTE BYTE; struct{ UBYTE A:6; UBYTE B1:1; U
typedef union { UBYTE BYTE; struct{ UBYTE A:6; UBYTE B1:1; UBYTE B0:1; }BIT; }A;
笑熬江湖1年前1
xiaopan 共回答了21个问题 | 采纳率90.5%
UBYTE是宏定义过的 数据类型,应该是usigned char 类型的;
所以BYTE是 UBYTE类型的 变量,占8位;
同理A B1、B0也是UBYTE类型的变量,但 由于位域的概念,A只占6位,B1占1位,B0占1位;这其实是一种程序优化方案;
这个定义的总体意思是:
A类型占8位:如果想全部访问,那么就用A.BYTE,来访问;
如果想局部访问,就用A.BIT.A;A.BIT.B1;A.BIT.B2来访问.