链表中的 指针,地址——数据结构(Summary)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhaofen_7/article/details/83089991

数据结构中跳过集合,直接开始线性结构
线性结构中单链表的操作涉及到给一个变量赋值地址,所以涉及到了指针
通过指针里的地址很方便找到节点
但指针这里绕了我很长时间,不论学了多少遍也不敢说把指针学会了

地址:

地址是什么,从哪里来? 地址是内存中每个字节的编号

在这里插入图片描述
我的电脑内存是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 代表 取这个节点的数据域的内容

猜你喜欢

转载自blog.csdn.net/zhaofen_7/article/details/83089991