C语言 第九章 结构体
第九章 结构体
自定义类型 – 结构体
结构体类型,不占内存,不能保存数据;
内存空间,可以保存数据
1 | struct stu |
sizeof对类型和变量均可使用
1 | sizeof(boy1); |
结构体类型变量的定义方式
先定义类型,再定义变量
1 | struct stu |
定义类型的同时,定义变量
1 | struct stu |
定义类型的同时定义变量,但省略类型名
因无类型名,无法再重新定义其他变量
1 | struct |
结构体类型变量的初始化
1 | struct stu |
结构体类型的数组
1 | struct stu ss[3]; |
结构指针变量
结构体变量用
.
结构体指针变量用
->
(
*
结构体指针变量)用.
1 | struct stu boy1; |
结构体类型数据做函数参数
用法与传普通变量类似,
结构体类型变量做函数参数,不会改变原来的实参的值。
结构体指针做函数参数,可以修改原来实参的值。
结构体类型的嵌套
1 | struct date |
第二种1
2
3
4
5
6
7
8
9
10
11
12
13struct stu
{
int num;
char name[10];
char sex;
struct
{
int year;
int month;
int day;
} birthday;
float score;
};
类型定义语句typedef
为类型起“绰号”,并不产生新的数据类型,只是给已有的类型增加新名
1 | typedef double real; |
C语言常用内存管理库函数(包含stdlib.h
)
函数名 | 介绍 | 备注 |
---|---|---|
malloc | 分配1块长度为size字节的连续内存空间(不清零),函数返回该空间的首地址;如分配失败函数返回0 | (类型说明符*)malloc(size) |
calloc | 分配n块、每块长度为size字节的连续内存空间(共size×n字节),并将该空间中的内容全部清零,函数返回该空间的首地址;如分配失败函数返回0 | (类型说明符*)calloc(n,size) |
free | 释放ptr所指向的一块内存空间,ptr是由malloc或calloc函数所分配空间的地址,即是这两个函数的返回值(或类型转换后的返回值) | free(ptr)(ptr为任意基类型的指针) |
链表
以链接方式存储的线性表,链表各元素的逻辑结构与存储结构一般不一致。
链表类型:单向链表,双向链表,循环链表。。。
链表介绍
单向链表
一个单向链表的节点分为两个部分,第一部分保存或者显示节点的相关信息,第二部分存储下一个节点的地址。单向链表只向一个方向遍历。
链表的一种,特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始;列表有节点构成,head指针指向第一个称为表头节点,而终止于最后一个指向NULL的指针。
双向链表
比单向链表多一个的是,双向链表每个节点有两个链接,一个指向前一个节点,而另一个指向下一个节点,当为最后一个节点时,指向空值或空列表。
循环链表
在一个循环链表中,首节点和末节点被连接在一起。这种方式,单向和双向都可实现。
链表的创建与输出
1 |
|
链表节点的插入和删除
节点的插入
1 | p = new struct node; |
节点的删除
1 | q->next = p->next; |