结构体和联合体
结构体
结构是一些值的合集,这些值称为的它的成员。这些成员的类型可能不同,通过名字可以对其进行访问。
结构体声明:
struct tag { member-list } variable_list ;
例:
struct { int a; char b; float c; } x;
结构成员的访问:
1.直接访问,通过点操作符(.)访问。
2.间接访问,通过箭头操作符(->)访问,箭头操作符的左操作数必须是一个指向结构的指针。
初始化:
一个位于一对花括号内部、又逗号分隔的初始值列表可用于结构各个成员的初始化。根据结构成员顺序写写出,若初始列表的值不够,剩余的结构成员将使用缺省值 进行初始化。
结构的存储分配:
按成员列表的顺序一个接一个的给每个成员分配内存,当存储成员时需要满足正确的边界对齐要求时,成员之间才可能出现用于填充的额外内存空间。
联合体
联合的声明和结构类似
简单的声明:
union {
float f;
int i;
} fi;
联合初始化时初始值必须为第1个成员的类型,而且它必须位于一对花括号里面。
union {
float f;
int i;
} fi = {3.14159};
区别
结构体(struct)中各成员都有自己的内存空间,是同时共存的,长度是所有成员的和(考虑需要满足正确的边界对齐要求的情况)。
联合体(union)中所有的成员只有一个内存空间,不同的时刻存储不同类型的值,长度是它最长成员的长度。
专业的物联网解决方案提供商,提供基于wifi和蓝牙的从app 到模组芯片的一体化解决方案,长期承接乐鑫,BES,stm32,Telink等芯片的方案设计开发及服务。 商务合作和技术探讨:邮箱:1173496664@qq.com weixin:18019245820 市场技术对接群:347609188 |