数据结构中跳过集合,直接开始线性结构 线性结构中单链表的操作涉及到给一个变量赋值地址,所以涉及到了指针 通过指针里的地址很方便找到节点 但指针这里绕了我很长时间,不论学了多少遍也不敢说把指针学会了
地址:
地址是什么,从哪里来? 地址是内存中每个字节的编号
我的电脑内存是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
怎样判断是不是指针
带*号的不一定就是指针,&取地址符的结果也不一定就是地址,因为有时候会用嵌套,使得问题不能直观看出来! 这时候,最最最重要的就是看 *后面的变量名里存的究竟是什么。 如果是一个真实的内存编号,那才是指针 例如: ![在这里插入图片描述](https://img-blog.csdn.net/20181016152729599?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3poYW9mZW5fNw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
数据结构中的p->next,p->data
C语言的表示 p 是一个指针,指针里存放的是结点A的地址 p-> 代表 指针p所存的地址对应的内容,这里P指针里存的是个节点,所以P->代表结点 p->next 代表 取这个节点的指针域的内容,这样就得到了下一个节点所在的内存地址 p->data 代表 取这个节点的数据域的内容
|