目录
前面我们讲解了指针以及函数,本章则重点了解一下结构体以及相关的作业示例
-
结构体
结构体:是一种构造函数类型,可以用于存储多个不同类型的数据,在内存中连续存放。
成员:一个结构体中的一个数据称作结构体的成员,一个结构体可以拥有多个成员。
例如:我们在日常生活中描述一个人,其有姓名、性别、身高、体重等
当我们使用C语言来定义时则需要多个不同类型的变量:
char name[20];
char sex[10];
int high;
int weigh;
这种情况我们就可以使用结构体去定义。
- 结构体的定义步骤:
- 先定义结构体类型。
- 通过该类型定义结构体变量。
struct 自定义结构体类型名 {
成员列表;
....
};
注意:成员定义 同变量定义 一致
图中便是结构体的基本定义,其类型为stuct people_a类型。
2.通过类型定义结构体变量:
使用定义的结构体类型来定义结构体变量并初始化。
例如
相同类型的结构体变量可以直接赋值。
例如:
在结构体定义类型时,一般会进行结构体别名定义:
typedef关键字就是取别名。
在后续的结构体变量定义中我们可以直接使用别名,对结构体变量进行定义。
- 结构体成员的访问:
1. 结构体变量.成员名
2.结构体指针:一个指针指向一个结构体首地址
结构体指针->成员名
结构体数组:
一个数组 其元素是 结构体
结构体指针数组:
一个数组其元素是结构体指针。
字节对齐
1.自动字节对齐:编译器根据变量的类型选择对应的对齐方式
例如:int 4, short 2, char 1,应当以4字节对齐。
#pragma pack () 表示采用自动字节对齐。
2.强制字节对齐:#pragma pack (2) 表示强制后续的结构体类型 均 以2字节对齐
大端小端存储
多字节数据: 在基本数据类型中 不能用1个字节存放的数据 都称作多字节数据
short int float ;
大小端:表示字节序,由CPU构架决定的
小端存储: 低地址 存储高位数据 例如:X86 架构CPU、家用电脑 PC。
大端存储 : 低地址 存储低位数据 例如:ARM 架构CPU 、手机 、 网络字节序。
堆区内存分配
1.申请堆区内存:
void *malloc(size_t size);
参数返回值: size表示大小位字节。
void * : 万能指针。
可能的值: NULL 内存申请失败 。
其他值申请成功即堆区地址。
2.释放内存:
void free(void *ptr);
ptr: 表示申请的堆区地址。
在释放内存的时候有可能会出现内存泄漏的问题。
内存泄漏: 丢失堆区指针, 无法free。
3.堆区内存使用情形:
1) 开辟较大的内存空间。
2) 使用周期较长变更较多,跨函数使用。
结束
C语言就大致给大家讲到这里,由问题或者不对的地方可以私信给小编,小编及时改正,毕竟我也是在学习中。。。。。。事情较多,更新随缘,谢谢大家。