struct结构体以及结构体的对齐

一. 结构体简述

具有相同或不同类型元素的集合叫做结构体。定义一个结构体,本质是在制作一个类型

二. 结构体的声明和定义

1、简单地声明一个结构体和定义结构体变量

像上面这样就是声明了一个结构体类型struct AA,此时的 struct AA 就相当于一个类型名。

然后我们可以用这个自己声明的结构体类型去定义变量:

2、声明结构体的同时,也可以定义结构体变量

  1. 先声明结构体类型 struct AA
  2. 再定义结构体变量 BB 和 CC

 

3、匿名结构体

使用方式:声明结构体的时候缺失结构体名,同时定义出一个或n个结构体变量:

4、配合 typedef,声明结构体的同时为结构体取别名

三. 结构体变量的初始化

先弄清楚变量初始化和赋值的区别:

结构体只能被整体初始化,不能被整体赋值,想要赋值的话只能把成员逐个地取出来,然后再去赋值。

补充:数组也是一样的道理:只能整体初始化,不能整体赋值。如果是字符数组想要整体赋值的话,可以使用 strcpy 函数:

四. 结构体成员的访问方法

我们可以通过变量或变量的地址去访问结构体的成员。

五. 结构体大小的计算

1. 计算方法

结构体的计算并不是单纯的相加,而是以一个结构体中所有变量中所对应的最大字节数来对齐,这样取数据元素时就会相对更高效,在整体对齐后微观方面的数据也是以当前最大单位对齐的。

2. 普通结构体

其结构体大小分配如下图

其中空格部分浪费掉了,总共占用了32个字节的空间

大多数情况下,成员变量已经占用的总字节个数并不一定正好为其成员变量中的最大对齐数的整数倍,这时我们需要将其扩大为最大对齐数的整数倍。

3. 包含数组成员的结构体

数组应拆开来看,不能看做一个整体

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值