C语言基础语法第七篇

本文详细介绍了C语言中的结构体类型,包括如何设计结构体,结构体变量的初始化和复制,结构体嵌套,通过指针访问结构体成员,以及结构体在内存中的表示。强调了结构体在节省空间和时间上的优势,同时讨论了结构体的内存对齐规则。此外,还提及了联合体的特点和结构体与数组的结合使用。
摘要由CSDN通过智能技术生成

1.结构体类型的设计

C语言提供了基本数据类型,如char,short,int,float...等类型,称之为内置类型,程序开发人员可以使用结构体来封装一些属性,设计出的新的类型,在C语言中称为结构体类型。

结构体类型的设计:

在C语言中,结构体是一种数据类型。(由程序开发者自己设计的类型)

结构体的定义形式为:

struct   结构体名

{

     成员列表 (可以是基本数据类型,指针,数组或其他结构类型)

};

我们设计的这个结构体他是一个实体属性的集合,但并非实体,就好比我们要造楼房,首先要设计楼房的图纸,然后按照图纸去建造,我们是住在按照图纸建造的楼房里,并非住在图纸里,不然那就是鬼,不是人了~~~嘿嘿

我们这里设计的结构体和图纸的作用是等价!

总结:图纸是楼房属性的集合,他是一个抽象概念,而楼房是一个实体,是实实在在存在的!

           结构体是图纸,结构体变量就是楼房!

2.结构体变量的设计和初始化

结构体是一种数据类型,是创建变量的模板,不占用存储空间;结构体变量才包含了实实在在的数据,需要存储空间。

 

结构体在内存中的表示

3. 结构体变量初始化与复制

 这是结构体的三种初始化方式

结构体类型相同的结构体变量之间可以相互赋值

4 .结构体嵌套结构体

内存中的表示:

此处的一个格子并不代表一个字节,只是来表示嵌套的存储状态

5.结构体变量和指针

用指针访问结构体成员

注意:  (*p) . 成员名 (. 的优先级高于 *,(*p)两边的括号不能少)

结构体传参时,应该采用结构体指针做参数,这样可以节省空间和时间

图示:

当调用test01时

当调用test02时 

这就是指针的优势,即省空间,又省时间 

6.结构体与数组

C语言结构体数组常被用来表示一个拥有相同数据结构的群体

 

7.结构体的大小计算

细心的小伙伴已经发现第一个图的猫腻~

10+8+20+4=42 

为什么会是44呢?

因为在计算结构体大小时,存在内存对齐

计算结构体大小的3条规则:

1.结构体变量的首地址,必须是结构体变量中的"最大基本数据类型成员所占字节"的整数倍

2.结构体变量中的每个成员相对于结构体首地址的偏移量,都是该成员基本数据类型所占字节数的整数倍

3.结构体变量的总大小,为结构体变量中"最大基本数据类型成员所占字节数"的整数倍。

举个例子:

 假设从0地址开始:

vs的默认对齐数为8,结构体的最大数据成员为4个字节,取二者最小为对齐数

图中为9个字节,但要为对齐数的整数倍,故为12个字节 

内存中的真实表示:

 如果结构体内含有数组,则看成一个一个的数组元素排列

8.联合体

联合体中各成员共享同一段内存空间,一个联合的长度等于各成员中最长的长度。

一个联合体类型必须在定义之后才能使用。

 是给 a初始化为1,给第一位的数据成员初始化

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值