给我五分钟,让你轻松了解什么是结构体以及结构体中的内存对齐的作用

本文详细介绍了如何在C语言中创建结构体,包括关键字、定义方式、初始化以及结构体中的自引用。重点讲解了内存对齐的概念、规则及其目的,通过实例说明了数据在结构体中的实际占用情况和嵌套结构体的处理。
摘要由CSDN通过智能技术生成

一、结构体的创建

1、创建结构体的关键字。

struct。

2、创建结构体公式:

struct + student(自定义名称,也可匿名定义)

{

//成员变量

char name[10];

int age;

}stu(在这里可以直接定义一个或多个结构体变量);

3、结构体初始化

初始化在main函数中进行:

int main()

{

//通过已经定义好的变量进行初始化

student.stu = {"zhangsan",20};

//通过在main方法中创建变量进行初始化

struct student stu2 = {"lisi",21};

}

4、结构体的自引用

struct + student(自定义名称,也可匿名定义)

{

//成员变量

char name[10];

int age;

//添加自引用,切记只能通过地址进行引用

struct student *next;

}stu(在这里可以直接定义一个或多个结构体变量);

二、结构体中的内存对齐(本次重点)

1、什么是内存对齐?

即数据在结构体内存中存储时,按照特定的值存入内存的过程

2、内存对齐的规则

(1)结构体的第⼀个成员对⻬到和结构体变量起始位置偏移量为0的地址处

(2)其他成员变量要对⻬到某个数字(对⻬数)的整数倍的地址处。

ps:对齐数= 编译器默认的⼀个对⻬数 与 该成员变量⼤⼩的较⼩值。

(3)结构体的总大小是最大对齐数的整倍数

(4)如果结构体中嵌套了结构体,嵌套的结构体成员对齐到自己的成员中最大对齐数的整倍数处,结构体的大小就是所有最大对齐数的整倍数。

3、结构体内存对齐是为了什么?

主要原因就是为了以空间换时间

我们来看以下代码:

struct S1
{
	char c1;
	int i;
	char c2;
};

这里的数据所占用的字节数是多少呢?

char占一个字节,int占四个字节,是不是6个字节呢?画图并结合上面的规则来给大家说明:

它的实际占用数就是12个字节,从第一个开始占用1+3,第二个占用4,第三个占用1,最终大小要和等于最大对齐数的整倍数+3。

接下来我们看一下存在嵌套问题的怎么处理:

在S3中,总站用16个字节,对齐数为最大对齐数的整倍数,最大对齐数是8,在这里它从8开始向后占用16个字节,d是double类型,同样占用8个字节,从24向后占用8个字节,总大小为32个字节,符合所有规则。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值