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