共用体union的妙用

来源:本站
导读:目前正在解读《共用体union的妙用》的相关信息,《共用体union的妙用》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《共用体union的妙用》的详细说明。
简介:结构体struct是一个常用的数据类型,主要是将各种类型的数据打包成一个新的数据类型,在驱动开发,寄存器的定义等方面都有比较大的优势。在使用的过程中需要注意空结构体的大小以及对齐(8字节)对数据大小的影响。具体的应用就不说了。另一个与struct非常相近的数据类型union则相对运用的较少,但是如果理解了union的本质就会发现该数据类型的好处。

union主要是将各种类型的数据存放在一段固定的存储器中,存储器的大小由union中需要最大存储器的数据类型决定。比如:

union student

{

char ***;

int age;

long number;

double score;

};

其中long、double需要16个字节,而char 只需要1个字节,因此该共用体占用16个字节。union的关键是不同的数据类型共用存储器。

主要的运用:

1、确定CPU的模式:大端、小端模式确定

大小端不同,则存储的方式也存在差别,比如int需要4个字节,而char只需要1个字节,根据1个字节所在的具体位置即可判定CPU的模式

union TestCPU

{

int i;

char ch;

};

void testCPUMode(void)

{

union TestCPU Test;

Test.i = 1;

if(Test.ch == 1)

{

//这个CPU是小端模式

}

else

{

//这种情况下就是大端模式

}

}

2、实现不同数据之间的类型转换

union Type

{

int i;

char ch;

long lint;

....

};

...

union Type type;

这样各种类型的数据共用存储空间,很方便的实现了不同数据类型之间的转换,不需要显示的强制类型转换。

union相比struct更加的节省空间。

3、寄存器的定义,实现整体的访问和单项的访问。

struct register

{char a;

char b;

char c;

char d;

};

union Register

{

struct register;

int whole;

};

这样就能实现单项和整体的访问,特别是引入位域操作等相关结构以后,能够实现每一个bit的访问。

提醒:《共用体union的妙用》最后刷新时间 2024-03-14 01:02:08,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《共用体union的妙用》该内容的真实性请自行鉴别。