当前位置: 首页 > news >正文

有关指针的认知盲区:指针大小,决定因素,指针变量

反思:: “指针变量”就是值为内存地址的变量
视频链接:3、Introduction to linked list_哔哩哔哩_bilibili

问题与思考

视频里提到一个词“指针变量”。这个词常听到,但我对其的核心思想和具体操作一知半解。感觉就是在一块内存空间存放内存地址,并且我认为内存地址是整数型的数据对象,这块存放“指针”的内存大小为4个字节。
还有一个问题是为什么“指针变量”要带变量两个字,变量这词的具体含义是什么?

回答

询问了deepseek后,发现了一些自己的认识盲区。先说一下对的认知
(1)本质:指针变量就是一个存放内存地址的变量。
(2)地址的形态:内存地址在底层确实通常被当作一个整数值来处理(更准确地说是无符号整数),因为它本质上是对内存字节序列的编号。

认知盲区
(1)指针大小
存放指针变量的内存大小因系统而定。32位系统是4字节(4∗8=324*8=3248=32)。64位系统是8字节(8∗8=648*8=6488=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、标识符(名字):一个我们人类能读懂的标签,比如 countusernamep
  • 2、值(Value):这个变量当前所代表的数据内容,比如 5, “Alice”, 0x7ffeeddccbbaa。
  • 3、内存地址:操作系统必须在内存(RAM)中为其分配一块真实的物理空间存储值,这块空间有自己的地址。

类比到指针变量上,指针变量也会有变量名称,值和内存地址。只不过指针变量在其内存地址中存的值一定是一个内存地址。分解来看就是

  • 一个指针变量p,它有自己的地盘(内存空间和地址)
  • p的工作是持有另一个内存空间的地址
http://www.xdnf.cn/news/1414675.html

相关文章:

  • EtherCAT主站IGH-- 44 -- IGH之slave_config.h/c文件解析
  • 目标检测算法YOLOv4详解
  • Langchain指南-关键特性:使用聊天模型调用工具
  • 用 MATLAB 实现遗传算法求解一元函数极值:从代码到实践
  • STL常见容器介绍
  • 从RNN到Transformer
  • @Transactional如何对分布式事务生效
  • Redis实现短信登录
  • 需要固定一个指针,再遍历另一个指针的都可以用双指针方法
  • 【系列11】端侧AI:构建与部署高效的本地化AI模型 第10章:LLM端侧部署
  • 二.Shell脚本编程
  • 在AlmaLinux或CentOS 8上编译安装ZLMediaKit流媒体服务器
  • CatBoost vs XGBoost:两大Boosting框架的全面对比
  • HTML5国庆网站源码
  • gdsfactory安装以及和klayout联调
  • 自学嵌入式第三十一天:Linux系统编程-进程间通信
  • 《程序员修炼之道》第七八九章读书笔记
  • Asible管理变量和事实和实施任务控制
  • 新手首次操作SEO核心要点
  • 深度学习周报(8.25~8.31)
  • 雪花算法生成分布式ID
  • C++ STL之哈希封装实现unordered_map/set
  • 第4章从一条记录说起-InnoDB记录结构
  • Redis六大常见命令详解:从set/get到过期策略的全方位解析
  • 如何用熵正则化控制注意力分数的分布
  • 【CVTE】C++开发 (提前批一面)
  • 【AI智能体】Dify 实现自然语言转SQL操作数据库实战详解
  • 【Spring】ApplicationListener监听器
  • 【芯片测试篇】:LIN总线
  • AI 赋能 Java 开发效率:全流程痛点解决与实践案例(一)