有关指针的认知盲区:指针大小,决定因素,指针变量
反思:: “指针变量”就是值为内存地址的变量
视频链接:3、Introduction to linked list_哔哩哔哩_bilibili
问题与思考
视频里提到一个词“指针变量”。这个词常听到,但我对其的核心思想和具体操作一知半解。感觉就是在一块内存空间存放内存地址,并且我认为内存地址是整数型的数据对象,这块存放“指针”的内存大小为4个字节。
还有一个问题是为什么“指针变量”要带变量两个字,变量这词的具体含义是什么?
回答
询问了deepseek后,发现了一些自己的认识盲区。先说一下对的认知
(1)本质:指针变量就是一个存放内存地址的变量。
(2)地址的形态:内存地址在底层确实通常被当作一个整数值来处理(更准确地说是无符号整数),因为它本质上是对内存字节序列的编号。
认知盲区
(1)指针大小
存放指针变量的内存大小因系统而定。32位系统是4字节(4∗8=324*8=324∗8=32)。64位系统是8字节(8∗8=648*8=648∗8=64)。
(2)“32位系统”中的数字32代表什么?
在理解指针大小时,突然就想到我们常说“32位系统”或“64位系统”,其中的数字就代表了其内存地址的长度。
(3)内存地址的长度由什么决定?
我一开始以为是内存的硬件设计,后来发现不是,是cpu的位宽。也就是说32位的cpu能处理的内存地址的长度是32位。32位cpu的寻址能力的上限就是232=4,294,967,296=4GB2^{32}=4,294,967,296=4GB232=4,294,967,296=4GB
(4)回到“指针变量”这个词,其中的“变量”是什么意思?
指针我理解了,就是内存地址,为什么这里要加“变量”?
先来看看普通的变量涉及哪些要素。以a=10
为例,a
是一个变量名称,10
是变量的值,这个值会存储在一块内存空间里,这里包含了下面三个核心元素:
- 1、标识符(名字):一个我们人类能读懂的标签,比如
count
,username
,p
- 2、值(Value):这个变量当前所代表的数据内容,比如 5, “Alice”, 0x7ffeeddccbbaa。
- 3、内存地址:操作系统必须在内存(RAM)中为其分配一块真实的物理空间存储值,这块空间有自己的地址。
类比到指针变量上,指针变量也会有变量名称,值和内存地址。只不过指针变量在其内存地址中存的值一定是一个内存地址。分解来看就是
- 一个指针变量
p
,它有自己的地盘(内存空间和地址) p
的工作是持有另一个内存空间的地址