欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 新车 > UNION嵌套STRUCT的两种类型

UNION嵌套STRUCT的两种类型

2024/10/25 2:18:25 来源:https://blog.csdn.net/wendyWJGU/article/details/142175374  浏览:    关键词:UNION嵌套STRUCT的两种类型

1. STRUCT里面的总长度大于UNION中的最大长度

        在UNION类型中,嵌套如STRUCT类型,其中STRUCT的类型还比UNION类型中最大的类型的长度还长的时候,会如何处理呢,看下面示例

程序源码

#include "stdafx.h"typedef unsigned long ULONG;
typedef unsigned char UCHAR;
typedef void *HANDLE;typedef struct
{ULONG f_data1;UCHAR f_data2;union{ULONG s_data1;UCHAR s_data2;struct{ULONG           s_Value1;			ULONG           s_Value2;		}data_second;}u;
}DATA_FIRST;int _tmain(int argc, _TCHAR* argv[])
{DATA_FIRST  d1;d1.f_data1 = 0x11111111;d1.f_data2 = 0x23;d1.u.s_data1 = 0x44444444;d1.u.s_data2 = 0x56;d1.u.data_second.s_Value1 = 0x789a;d1.u.data_second.s_Value2 = 0x88888888;printf("Print data: \n");printf("\t	d1.f_data1 = 0x%X \n", d1.f_data1);printf("\t	d1.f_data2 = 0x%X \n", d1.f_data2);printf("\t	d1.u.s_data1 = 0x%X \n", d1.u.s_data1);printf("\t	d1.u.s_data2 = 0x%X \n", d1.u.s_data2);printf("\t	d1.u.data_second.s_Value1 = 0x%X \n", d1.u.data_second.s_Value1);printf("\t	d1.u.data_second.s_Value2 = 0x%X \n", d1.u.data_second.s_Value2);return 0;
}

运行结果

源码分析

2. TRUCT里面的总长度小于等于UNION中的最大长度

        在UNION类型中,嵌套如STRUCT类型,其中STRUCT的类型比UNION类型中最大的类型的长度还小时候,会如何处理呢,看下面示例

程序源码


#include "stdafx.h"typedef unsigned long ULONG;
typedef unsigned char UCHAR;
typedef void *HANDLE;typedef struct
{ULONG data1;union{ULONG data2;UCHAR data3;struct{ULONG           value1: 4;ULONG           value2 : 4;ULONG           value3 : 4;ULONG           value4 : 4;ULONG           value5 : 4;ULONG           value6 : 4;ULONG           value7 : 4;ULONG           value8 : 4;}value;}u;
}DATA_FIRST;int _tmain(int argc, _TCHAR* argv[])
{DATA_FIRST  d;d.data1 = 0x11112222;d.u.data2 = 0x22334455;d.u.data3 = 0xaa;d.u.value.value5 = 0xb;printf("Print data: \n");printf("\t	d.data1 = 0x%X \n", d.data1);printf("\t	d.u.data2 = 0x%X \n", d.u.data2);printf("\t	d.u.data3 = 0x%X \n", d.u.data3);printf("\t	d.u.value.value1 = 0x%X \n", d.u.value.value1);printf("\t	d.u.value.value2 = 0x%X \n", d.u.value.value2);printf("\t	d.u.value.value3 = 0x%X \n", d.u.value.value3);printf("\t	d.u.value.value4 = 0x%X \n", d.u.value.value4);printf("\t	d.u.value.value5 = 0x%X \n", d.u.value.value5);printf("\t	d.u.value.value6 = 0x%X \n", d.u.value.value6);printf("\t	d.u.value.value7 = 0x%X \n", d.u.value.value7);printf("\t	d.u.value.value8 = 0x%X \n", d.u.value.value8);return 0;
}

运行结果:

源码分析:

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com