数据结构中跳过集合,直接开始线性结构
线性结构中单链表的操作涉及到给一个变量赋值地址,所以涉及到了指针
通过指针里的地址很方便找到节点
但指针这里绕了我很长时间,不论学了多少遍也不敢说把指针学会了
地址:
地址是什么,从哪里来? 地址是内存中每个字节的编号
我的电脑内存是4G=4×1024(M)×1024(K)×1024(Byte)=4294967296 Byte
其中每个字节Byte=8位bit
如果为每一个字节编码,那么范围为0~4294967295(十进制)
换算为2进制:0000 0000 0000 0000 ~ 1100 1101 1111 1111 1111 1111 1111 1111(32bit)
换算为16进制:0x 00000000 ~ 0xCDFFFFFF
所以人们就用:0x 00000000 ~ 0xFFFFFFFF 来表示内存地址的范围
其中一个字节分配一个地址
指针:
指针是什么,从哪里来?指针是保存地址的变量比如我们有一个 整数 3 ,我们用一个整型变量 int a 来存储这个3
那么,如果你有一个地址 0xCDFFFFFF,需要一个 变量来存这个地址,那么存这个地址的变量就要做指针,指针也有类型。什么类型的指针用来指向什么类型的值
比如:
内存编号为 0xCDFFFFFF的空间里存了一个整数3
将0xCDFFFFFF这个地址存放到内存编号为0xCDFFFFF0的内存空间中
在程序中声明了一个整型的指针变量,这个变量里存的就是0xCDFFFFF0
由于这个指针所指向的地址空间里存放的是个整型数,所以这个指针的类型就为整型
指针–地址的符号
*代表 指向某个内存编号(地址)的指针
举例: *a 代表指向0xCDFFFFFF内存编号的地址变量
& 取出地址
&(*a) 取出地址变量*a的存储内容,结果为0xCDFFFFFF
怎样判断是不是指针
带*号的不一定就是指针,&取地址符的结果也不一定就是地址,因为有时候会用嵌套,使得问题不能直观看出来!
这时候,最最最重要的就是看 *后面的变量名里存的究竟是什么。
如果是一个真实的内存编号,那才是指针
例如:
数据结构中的p->next,p->data
C语言的表示
p 是一个指针,指针里存放的是结点A的地址
p-> 代表 指针p所存的地址对应的内容,这里P指针里存的是个节点,所以P->代表结点
p->next 代表 取这个节点的指针域的内容,这样就得到了下一个节点所在的内存地址
p->data 代表 取这个节点的数据域的内容