7.24数据结构的学习

一、结构体

c的数据类型:

基本数据类型:char、 short、 int、 double、 float、 long

构造数据类型:数组、指针、结构体、共用体、枚举

1.1 概念

结构体是一种用户自定义的数据类型,用于存储相同的或者不同的数据的构造数据类型。

1.2 格式

1.3 结构体的初始化和赋值

1.3.1 间接初始化和赋值

案例:

1.3.2 直接初始化和赋值

将变量直接放在结构体类型后面进行定义。

1> 直接初始化,可以省略结构名

2> 如果省略结构名,则只能使用已有的结构体变量

案例:

1.4 结构体数组

数组:一次性定义多个数据类型相同的变量

结构体数组:一次性定义多个类型相同的结构体变量

1.4.1 间接初始化结构体数组

1.4.2 直接初始化结构体数组

1.5 结构体指针

结构体指针用来存储结构体变量的地址。

案例:

1.6 访问结构体内部成员的方式

1】 通过结构体变量 . 访问内部成员

2】 通过结构体指针 -> 访问内部成员

1.7 typedef 结合结构体使用

1.8 结构体的嵌套(了解)

1.9 结构体中嵌套结构体数组

2.1 结构体字节对齐(字节计算 笔试)

1.结构体各个成员的地址是连续的

2.结构体变量的地址是第一个成员的地址

3.64位操作系统,8字节对齐::

1> 结构体的总字节大小是各个成员字节的总和,但是需要满足是最宽成员的倍数

2> 结构体的首地址是最宽成员的倍数

3> 结构体各个成员的偏移量是该成员字节的整数倍,否则填充空字节

4.32位操作系统,4字节对齐:

i.结构体的总字节大小是各个成员字节的总和,但是需要满足是最宽成员的倍数

如果最宽成员是1,则是1的倍数

如果最宽成员是2,则是2的倍数

如果最宽成员是4,8,则是4的倍数

ii.结构体的首地址是最宽成员的倍数

iii.结构体各个成员的偏移量是该成员字节的倍数,否则填充空字节

如果成员字节是1,则偏移量是1的倍数

如果成员字节是2,则偏移量是2的倍数

如果成员字节是4,8,则偏移量是4的倍数

二、共用体 (union)

2.1 概念

可以是相同数据或者不同数据,共同使用一个内存空间。是一种构造数据类型。

2.2 作用

可以将一个段内存,去存放不同的数据类型。

2.3 格式

union 共用体名 { 数据类型 变量名1; 数据类型 变量名2; 数据类型 变量名3; ... 数据类型 变量名n; }; 解释: 1. union 是共用体的关键字 2. 共用体名,要符合命名规则,可以省略 3. {}不可以省略 4. 共有体的成员类型,可以是基本数据类型,也可以是构造数据类型 5. 成员变量的个数任意 6. 分号不可以省略 eg : //定义一个共用体 union Test { int num; //整型变量 4 double key; //双精度浮点型 8 char a; //字符型 1 };

2.4 使用公用体的注意事项

1】 定义共用体以及初始化和结构体的定义几乎一致,但是,由于共用体的成员都使用一份内存空间,所以在初始化时只需要给定义一个值即可,而这个值需要与第一个变量的类型保持一致。

2】 共用体的每个成员变量的地址相同

3】 共用体的变量,不能当做函数的形参

4】访问共用体成员,可以通过共用体变量.访问,也可以通过共用体指针->访问

5】共用体的大小是成员变量的最大属性的类型大小。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值