结构体
数据类型
基本数据类型
整型
浮点型
字符型
构造类型
数组
结构体
结构体: 用来处理,现实生活中,更复杂的数据的描述
用来 描述复杂数据的 一种用户自定义的数据类型
描述学生信息:
//简单点
name // "tom"
sex // ""
age // int
sno // int
score // float
//详细点
name
sex
age
sno
score
address
tel
qq
email
parent
...
//结构体类型 定义 --- 定义(从无到有) 声明()
struct 结构体名
{
成员列表
};
(1).struct 表示 这是一个结构体类型
(2).结构体名 标识符
(3).成员列表 这个结构类型中要描述的具体数据
一般,都是变量定义的形式
eg:
struct student
{
int sno;
char name[20];
int age;
float score;
}; //此时 表示 定义了一个 学生信息 的 结构体类型
//数据类型 --- 用户自定义
//有了数据类型 之后
int //c语言提供的
int a;
int *p;
int a[10];
//定义一个结构体类型的变量
struct student s; //定义了一个学生类型的结构体变量
------1------- -2-
1 是结构体类型名
2 是变量名
//变量的初始化 和 赋值
struct student s = {110,"tom",18,98.5}; /
//引用结构体数据
一般,我们是引用到结构体成员 (引用到这种基本类型)
. //结构体成员运算符
结构体变量名.结构体成员变量名
s.sno
s.name
s.age
s.score //引用到结构体成员变量
说明:
1. 同一类型的结构体 变量间 可以相互赋值
2. 结构体变量赋值,是赋值给 结构体成员的
-> //指向结构体成员运算符
结构体类型的指针->结构体成员变量名
考点:
结构体的对齐规则: //内存地址的对齐
1.在32位的平台上,默认都是按4字节对齐的。
2.对于成员变量,
各自在自己的自然边界上对齐。
char -- 1字节
short -- 2字节
int -- 4字节
3.如果 成员变量中有比4字节大。
此时 整个结构体 按照4字节对齐。 //32位的平台
4.如果 成员变量中没有有比4字节大。
此时 整个结构体 按照最大的那个成员对齐。
//32位的平台
//如果有超过4字节 ,按照4字节对齐
//如果没有超过4字节的,则按成员变量中最大对齐
//64位的平台 ---- 64位平台 整个结构体对齐, 按成员中最大的对齐
1.结构体成员的对齐 --- 放在自然边界 (偶数位置)
2.结构体整体的对齐 --- 以结构体中最大的成员对齐
⭐️注意:
1.结构体类型的定义
可以在全局
可以在局部
2. 使用方式
1. 先定义结构体类型 再定义变量名
struct student
{
...
}; //定义了类型
struct student s; //定义了变量
2. 定义类型的同时定义变量
struct student
{
...
}s={...}; //定义了类型
3. 定义类型的同时定义变量 ,结构体名省略
struct
{
...
}s={...}; //定义了类型
//堆区 --- 空间很大,但是需要手动申请,手动释放
void *malloc(size_t size); // 申请函数
功能:
从堆区申请一块内存空间
参数:
@size ---说明,要申请的空间的大小
返回值:
void * 返回申请到的空间的地址
void free(void *ptr); //释放函数
功能:
释放堆区空间
参数:
pstr //必须是 之前 申请到的堆区内存空间的地址
⭐️ 注意:
1.free本身表示将空间释放,就是将空间交还给操作系统,操作系统之后,可以自由安排
2.注意:
free 并不会将释放的空间上的数据清零
3.不能对同一块空间多次free
4.释放掉之后的,空间,不要在使用了
一般将对应的指针变量设置为NULL
//(悬空指针)