由一批数据组合而成的结构型数据。组成结构型数据的每个数据称为结构型数据的“成员”,其描述了一块内存空间的大小及解释意义。
语法:
struct 结构体名
{
结构体成员列表
};
下图是struct的定义和使用方法,其中20行这种赋值方式错误,因为字符串是常量,只能在定义时就进行赋值,不能在后面赋值了,赋值是通过19行
当然也可以直接定义时就进行赋值
局部赋值方式
结构体数组
将自定义的结构体放入到数组中方便维护
语法:
struct 结构体名 数组名[元素个数] = {{},{},......{}}
结构体指针
通过指针访问结构体中的成员
struct 结构体名 *指针名;
利用操作符->可以通过结构体指针访问结构体属性
指针指向了结构体地址
结构体嵌套
结构体大小
字节对齐
针对结构体而言,通常编译器会自动对其成员变量进行对齐,以提高数据存取效率
1、移植原因:不是所有的硬件平台都能访问任意地址上的任意数据;某些硬件平台只能在某些地方处取某些特定类型的数据,否则抛出硬件异常。
2、数据结构(尤其是栈)应该尽可能地在自然边界上对齐。原因是,为了访问未对齐地内存,处理器需要作两次内存访问;而对齐地内存访问仅需要一次访问。
结构体大小计算方法
自身对齐:数据类型本身大小
默认对齐:电脑
有效对齐:结构体最终以多少字节对齐(取自身和默认的最小值)
地址要能够整除有效对齐,所以导致了会浪费一些地址
下面左图是struct A,右图是struct C
位域
是把一个字节中的二进制位分为几个不同区域,并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。这样就可以把几个不同对象用一个字节的二进制位域来表示
定义并 赋值