结构体和共用体

5 结构体、共用体

5.1 结构

5.1.1 如何定义一个结构

结构体的使用分为两步,一是结构的定义,二是结构变量的声明

struct student//结构的定义
{
    char name[20];
    int age;
    float weight;
};
[struct] student A;//结构变量的声明,[]:可省略
struct student//结构的定义
{
    char name[20];
    int age;
    float weight;
} A;//结构变量的声明
struct 
{
    char name[20];
    int age;
    float weight;
} A;//结构变量的声明,没有类型名称的结构

结构可以相互赋值,利用结构来处理数组的整体赋值操作。

5.1.5 结构体变量的sizeof

结构体变量的大小不是由组成类型大小的简单叠加,而涉及到字节对齐机制。成员变量的定义顺序也会影响结构体变量占据的内存大小。

  1. 结构体变量的首地址能够被其最宽基本类型成员的大小所整除
  2. **每个成员相对于结构体首地址的偏移量都是成员大小的整数倍。**否则Internal Adding。复合成员相对于结构体首地址的偏移量都是复合成员中最宽简单类型成员大小的整数倍
  3. 结构体的总体大小为结构体最宽基本类型的整数倍。否则Trailing Padding

字节对齐有助于加快计算机的取数速度,节省指令周期。

5.2 共用体

在公用体中,各种数据 类型在内存中占据相同的地址,换句话说,在某个确定的时刻,共用体只能表示一种数据类型。

5.2.1 共用体的定义
union 共用体名称
{
    存储数据列表
};
union info
{
    int grade;
    char department[20];
};
5.2.3 共用体变量的声明和初始化
[union] 共用体 共用体变量;
info person={2};

初始化只能对列表中第一个变量进行初始化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值