结构体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的拜访。
其他的优势需求总结,我暂时写这三点了。