数组: 在栈空间内存中申请一块内存,使用变量间接访问这片内存
例子: int A[3] --> 在栈空间中"连续"申请12个字节
A[0] A[1] --> 使用变量A间接访问内存空间 --> A[0]与A[1]之间通过地址寻找下一个数组的目标
A[0] 等价于 *(A+0)
A[1] 等价于 *(A+1)
数组: 地址连续,地址之间相差字节数已知 --> 地址+相差字节数=得到下一个目标的值
特点:
1. 由于数组申请的时候地址是连续的,而是每一个储存单位都相同,肯定可以通过计算来得到下一个元素
2. 大小固定的,每次修改数组的值,必须检查数组空间大小 --> 效率低
链表:在堆空间申请一些零碎的内存空间,使用地址让他们连接在一起。
设计链表节点:
struct data{
int A; //数据域 -> 存放该节点的数据
struct data *p; //指针域 --> 存放下一个节点的地址
}
特点:
1. 链表每一个节点的空间都不需要连续的,可以让系统一些零碎的内存空间使用起来
2. 链表由于每一个节点都会存放下一个节点的地址,链表不是通过计算得到下一个节点,而是通过查看指针域来得到下一个节点
3. 没有固定的大小,添加或者删除节点非常方便