九、初识C语言之指针、结构体、链表

1、指针

内存会划分为一个个的内存单元(一个内存单元占1byte),每个内存单元都有一个编号,这个编号就是地址,地址也被称为指针。因此存放指针的变量就是指针变量。指针变量的值是用第一个内存单元的编号表示的。

int* p = &a;&是取地址操作符,*说明p是指针变量,int是根据aint来定的,如果是字符类型即为char。打印指针变量时用%p做占位符。

*p是指通过指针变量p中存放的地址找到指向的对象。*p在这里就是a

指针变量的大小取决于地址的大小。地址大小在32位平台下是32bit4byte组成的2进制序列,在64位平台下是64bit8byte组成的2进制序列,所以同一平台下不同类型数据的指针变量的大小是相同的。

2、结构体

我们学过intchardouble等变量的类型,它们创建的变量类型固定,但现实中描述一个事物时可能包含多种类型,结构体就是很多类型变量的集合,用于描述某一种事物。

一方面可以理解为我们自己定义的一种变量类型,它在使用方式上和基本变量类型是一致的,另一方面它又不同于基本变量类型,它可以包含好几种基本变量类型的数据

比如:描述一个学生用姓名、性别、年龄、手机号码等。

struct来定义结构体Stu是结构体的名字。{}里面的是该结构体中包含的成员。调用时用:结构体名.成员(如s.name)占位符根据成员的类型来确定。

如图是用指针函数来进行打印的方式注意函数参数、和打印时的操作符:结构体指针变量->成员名(如ps->age)、结构体名.成员(如s.name)以及使用函数时输入的是指针,接收时同样要用结构体指针变量来接收。

前面既然说它和基本变量类型相似,那么同样它也有结构体数组,定义方式和基本类型是相同的。初始化、修改和使用也都是相同的,都用下标的方式。

同样结构体和函数也有相似之处,结构体也可以嵌套调用。在使用时同样用两次.调用(例如:stu1.birthday.year)。

结构体所占字节数:看里面包含的内容,它存在内存对齐的问题,看向最大的,一定是里面类型中所占内存最大的整数倍。如(int和double和char:2*8)

3、链表

链表由一系列节点组成,每个节点包含两个域(数据域、指针域)属于动态内存,需要就创建,并且它在地址上是不连续的。

数据域:用于存储当前节点的数据,类型为用户存储的类型(int、char等)。

指针域:用于指向下一个节点的首地址,类型为结构体指针,结束指向空指针。

相较于数组的优点:因为是指向的故只需修改指向即可增减数据,不需要大幅移动数据。

缺点:查找效率低一些、多了一个指针域的内存。

链表分类:静态链表、动态链表

          单向链表、双向链表、单向循环链表、双向循环链表

头结点:里面没有数据,只是代表一个头而已,方便了插入。

链表的创建(相当于把结构体给连起来):

链表相当于好多个结构体的有序链接。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值