地址的变量,其本质是一个独立的变量,拥有自己的内存空间,存储的内容是目标变量的地址(通常为 字节或 字节,取决于系统位数)。 . ...

发布时间:2026/7/26 15:44:44

地址的变量,其本质是一个独立的变量,拥有自己的内存空间,存储的内容是目标变量的地址(通常为 字节或 字节,取决于系统位数)。 . ...
地址的变量指针的本质与内存管理实战解析在计算机编程中我们经常听到“指针”或“地址变量”这一概念。许多人初学时认为它只是普通变量的“别名”但实际上地址的变量指针是一个独立的变量拥有自己的内存空间存储的内容是目标变量的地址。它的大小取决于系统位数32位系统为4字节64位系统为8字节。本文将从实战角度出发通过大量代码示例深入剖析这一本质并探讨其在实际开发中的应用。## 指针的独立内存空间本质剖析### 核心概念普通变量如int a 10存储的是直接的值如整数10而指针变量如int *p a存储的是另一个变量的内存地址。指针本身作为一个变量在内存中占用独立的空间32位系统占4字节64位系统占8字节用于存放这个地址值。### 代码示例1验证指针的独立内存空间pythonimport sys# 定义一个普通变量a 42print(f变量 a 的值为{a})print(f变量 a 的内存地址十六进制{hex(id(a))})print(f变量 a 的内存地址十进制{id(a)})# 定义一个指向 a 的指针在 Python 中id() 返回对象的地址我们可以将其视为指针p id(a) # 存储 a 的地址print(f\n指针 p 存储的地址十六进制{hex(p)})print(f指针 p 存储的地址十进制{p})# 验证指针本身也有独立的内存空间print(f\n指针 p 本身的地址十六进制{hex(id(p))})print(f指针 p 本身的地址十进制{id(p)})# 输出指针变量的大小在 Python 中整数对象大小不固定但 id() 返回的整数通常为 28 字节# 为了演示效果我们使用 C 语言风格的示例会更直观注释解析-id(a)返回变量a在内存中的地址类似 C 中的a。-p id(a)将a的地址存储到p中此时p就是一个地址变量。-id(p)返回指针p本身的内存地址证明指针变量拥有独立的存储空间。 在 Python 中变量本质上是对象的引用但通过id()我们可以模拟指针行为。更真实的演示需要 C 语言。## 实战代码C语言中的指针内存操作为了清晰展示指针的独立内存空间和存储内容我们使用 C 语言编写第二个示例。C 语言直接管理内存能精确控制指针的大小和操作。### 代码示例2C语言指针的内存布局演示c#include stdio.h#include stdint.h // 用于 uintptr_t 类型可选int main() { // 1. 定义普通变量 int a 10; printf(a 的值%d\n, a); printf(a 的地址%p\n, (void*)a); printf(a 的大小%zu 字节\n, sizeof(a)); // 通常为 4 字节 // 2. 定义指向 a 的指针变量 int *p a; // p 存储 a 的地址 printf(\n指针 p 的值存储的地址%p\n, (void*)p); printf(指针 p 本身的地址%p\n, (void*)p); printf(指针 p 的大小%zu 字节\n, sizeof(p)); // 在64位系统上为8字节32位为4字节 // 3. 验证指针的独立内存空间 printf(\n 指针独立内存验证 \n); printf(变量 a 的地址%p\n, (void*)a); printf(指针 p 的地址%p\n, (void*)p); if ((void*)a ! (void*)p) { printf(结论指针变量 p 拥有独立于变量 a 的内存空间\n); } // 4. 通过指针修改目标变量 printf(\n 通过指针修改变量 \n); printf(修改前 a 的值%d\n, a); *p 20; // 解引用指针修改 a 的值 printf(通过指针修改后 a 的值%d\n, a); // 5. 系统位数对指针大小的影响 printf(\n 系统位数影响 \n); printf(指针 p 的大小%zu 字节\n, sizeof(p)); printf(指针 p 的位宽%zu 位\n, sizeof(p) * 8); if (sizeof(p) 8) { printf(当前为64位系统指针占8字节\n); } else if (sizeof(p) 4) { printf(当前为32位系统指针占4字节\n); } // 6. 多级指针指针的指针 int **pp p; // 二级指针存储 p 的地址 printf(\n二级指针 pp 的值%p\n, (void*)pp); printf(二级指针 pp 本身的地址%p\n, (void*)pp); printf(二级指针 pp 的大小%zu 字节\n, sizeof(pp)); printf(通过二级指针访问 a 的值%d\n, **pp); return 0;}注释解析-int *p a;定义指针p并将a的地址赋值给它。-sizeof(p)获取指针变量自身占用的内存大小在64位系统为8字节32位为4字节。-p取指针变量p本身的地址证明指针拥有独立的内存空间。-*p 20;通过解引用操作间接修改a的值。-int **pp p;二级指针用于演示指针的嵌套关系。运行结果示例64位系统a 的值10a 的地址0x7ffd5a3b4ca 的大小4 字节指针 p 的值存储的地址0x7ffd5a3b4c指针 p 本身的地址0x7ffd5a3b50指针 p 的大小8 字节 指针独立内存验证 变量 a 的地址0x7ffd5a3b4c指针 p 的地址0x7ffd5a3b50结论指针变量 p 拥有独立于变量 a 的内存空间 通过指针修改变量 修改前 a 的值10通过指针修改后 a 的值20 系统位数影响 指针 p 的大小8 字节指针 p 的位宽64 位当前为64位系统指针占8字节二级指针 pp 的值0x7ffd5a3b50二级指针 pp 本身的地址0x7ffd5a3b58二级指针 pp 的大小8 字节通过二级指针访问 a 的值20## 指针与动态内存分配实战应用指针的核心价值在于动态内存管理。以下是一个动态数组的实战示例c#include stdio.h#include stdlib.h // 包含 malloc, freeint main() { int n 5; // 动态分配一个整数数组 int *arr (int*)malloc(n * sizeof(int)); if (arr NULL) { printf(内存分配失败\n); return 1; } // 初始化数组 for (int i 0; i n; i) { arr[i] i * 10; } // 打印数组 for (int i 0; i n; i) { printf(arr[%d] %d\n, i, arr[i]); } // 释放内存 free(arr); arr NULL; // 避免悬空指针 printf(\n动态内存分配示例完成。\n); return 0;}## 总结通过上述实战代码演示我们可以清晰地理解以下核心概念1.指针是独立的变量指针变量拥有自己的内存地址如代码中的p与目标变量如a的地址不同。它占用固定大小的内存空间32位系统4字节64位系统8字节用于存储目标变量的地址。2.存储内容为地址指针存储的是目标变量的内存地址如a而不是目标变量的值。通过解引用操作*p可以访问或修改目标变量的值。3.系统位数决定大小指针的大小取决于系统位数32位系统为4字节64位系统为8字节。这直接影响可寻址的内存范围32位最大4GB64位远大于此。4.多级指针扩展指针可以嵌套如int **pp形成多级间接访问这在复杂数据结构如链表、树和函数参数传递中非常有用。5.动态内存管理指针是动态内存分配如malloc/free的核心工具允许程序在运行时灵活管理内存但必须注意释放内存以避免内存泄漏。理解指针的本质对于编写高效、安全的代码至关重要。指针不是目标变量的“影子”而是一个独立的变量它像一座桥梁通过存储地址的方式间接操作目标数据。掌握这一概念你将能更深入地理解内存布局、数据结构实现以及底层系统编程。

相关新闻

基于YOLOv5与HSV的实时交通信号灯识别系统

基于YOLOv5与HSV的实时交通信号灯识别系统

2026/7/26 15:44:44

1. 项目背景与核心价值 红绿灯识别是智能交通系统和自动驾驶领域的基础能力之一。传统方案依赖专用硬件和固定摄像头,而基于计算机视觉的软件解决方案具有部署灵活、成本低廉的优势。这个Python项目实现了从普通摄像头视频流中实时检测交通信号灯状态的功能&#xf…

Unity开发效率革命:Rider IDE深度配置与C#调试实战指南

Unity开发效率革命:Rider IDE深度配置与C#调试实战指南

2026/7/26 15:44:44

1. 项目概述:为什么是Rider?如果你还在用Visual Studio或者VS Code搭配Unity,并且觉得调试卡顿、智能提示慢半拍,或者被各种插件冲突搞得心烦,那今天这篇分享可能会彻底改变你的工作流。我用了快十年的Unity&#xff0…

原神抽卡数据导出终极指南:三步永久保存你的祈愿历史

原神抽卡数据导出终极指南:三步永久保存你的祈愿历史

2026/7/26 15:34:44

原神抽卡数据导出终极指南:三步永久保存你的祈愿历史 【免费下载链接】genshin-wish-export Easily export the Genshin Impact wish record. 项目地址: https://gitcode.com/GitHub_Trending/ge/genshin-wish-export 还在担心原神游戏中的抽卡记录会过期丢失…

频谱拍卖机制演进与5G部署:FCC目标合理性技术分析

频谱拍卖机制演进与5G部署:FCC目标合理性技术分析

2026/7/26 16:54:47

频谱拍卖再次启动:FCC的目标设定是否合理?最近,美国联邦通信委员会(FCC)宣布启动新一轮频谱拍卖,这已经是该机构自1994年以来的第20多次拍卖活动。但这次的情况有些不同——随着5G网络部署进入关键阶段&…

从混乱到清晰:LangChain如何成为你的AI应用构建神器

从混乱到清晰:LangChain如何成为你的AI应用构建神器

2026/7/26 16:54:47

从混乱到清晰:LangChain如何成为你的AI应用构建神器 【免费下载链接】langchain The agent engineering platform. 项目地址: https://gitcode.com/GitHub_Trending/la/langchain 想象一下这样的场景:你有一个绝妙的AI应用想法,但面对…

技术交流会内容处理系统:从音频采集到文本发布的完整架构

技术交流会内容处理系统:从音频采集到文本发布的完整架构

2026/7/26 16:54:47

最近在技术社区看到不少关于"42页交流会实录"的讨论,作为开发者,我们更关心的是技术背后的架构设计和实现逻辑。本文将从一个技术复盘的角度,深入分析大型技术交流会的系统支撑方案,涵盖从内容采集到最终发布的完整技术…

Havenlon | 杂谈:AI时代,我们正在把判断外包

Havenlon | 杂谈:AI时代,我们正在把判断外包

2026/7/26 16:54:47

AI 可以生产答案,但不能替人成为答案的承担者 人类先把体力交给机器,把计算交给计算机,把检索交给搜索引擎。现在被交出去的是另一种更接近核心的能力:判断。 我们问 AI 该选哪个方案、该相信哪种说法、该如何回复一封邮件&#x…

SickZil-Machine:用深度学习自动擦除漫画文本的革命性工具

SickZil-Machine:用深度学习自动擦除漫画文本的革命性工具

2026/7/26 16:54:47

SickZil-Machine:用深度学习自动擦除漫画文本的革命性工具 【免费下载链接】SickZil-Machine Manga/Comics Translation Helper Tool 项目地址: https://gitcode.com/gh_mirrors/si/SickZil-Machine 在漫画翻译(Scanlation)过程中&…

AI Agent开发实战:从核心架构到网页自动化完整指南

AI Agent开发实战:从核心架构到网页自动化完整指南

2026/7/26 16:44:47

1. AI Agent技术概述与应用场景AI Agent(人工智能代理)作为当前人工智能领域的热门技术,正逐渐从概念走向实际应用。简单来说,AI Agent是一个能够感知环境、自主决策并执行任务的智能系统。与传统的单次问答式AI不同,A…

[具身智能-649]:个人电脑搭建 RTSP 服务完整方案(Windows / Ubuntu 双平台,适配 RDK X5 rtsp2display 调试)

[具身智能-649]:个人电脑搭建 RTSP 服务完整方案(Windows / Ubuntu 双平台,适配 RDK X5 rtsp2display 调试)

2026/7/26 0:04:02

目标:电脑作为RTSP 服务端,循环推送 H264/H265 视频流; RDK X5 通过 rtsp2display 拉流预览,完全不需要在开发板编译 live555。 提供两套成熟方案: ✅ 方案 A:FFmpeg(最简单,优先推…

PDF合并与动态水印的工程化方案:2026国内免费工具实测对比

PDF合并与动态水印的工程化方案:2026国内免费工具实测对比

2026/7/26 0:04:02

一、背景与测试方案 在实际项目交付中,PDF文件合并与版权保护水印的叠加是一个高频但容易被低估的技术需求。典型的处理链路涉及:多源PDF的文件流合并、页面级水印渲染(含透明度混合与图层叠加)、输出文件体积控制。看似简单的操作…

PDF拆分压完图糊了?2026国内免费实测,档案员都在用的组合方案

PDF拆分压完图糊了?2026国内免费实测,档案员都在用的组合方案

2026/7/26 0:04:02

说实话,提到PDF拆分再压缩,我真是被折腾得够呛。 上个月公司年度合同归档,一份300多页的PDF总合同,需要按年份拆分成三个独立文件,再分别压缩到10MB以内方便邮件发送各部门确认。我心想这还不简单?先找个海…

[具身智能-649]:个人电脑搭建 RTSP 服务完整方案(Windows / Ubuntu 双平台,适配 RDK X5 rtsp2display 调试)

[具身智能-649]:个人电脑搭建 RTSP 服务完整方案(Windows / Ubuntu 双平台,适配 RDK X5 rtsp2display 调试)

2026/7/26 0:04:02

目标:电脑作为RTSP 服务端,循环推送 H264/H265 视频流; RDK X5 通过 rtsp2display 拉流预览,完全不需要在开发板编译 live555。 提供两套成熟方案: ✅ 方案 A:FFmpeg(最简单,优先推…

PDF合并与动态水印的工程化方案:2026国内免费工具实测对比

PDF合并与动态水印的工程化方案:2026国内免费工具实测对比

2026/7/26 0:04:02

一、背景与测试方案 在实际项目交付中,PDF文件合并与版权保护水印的叠加是一个高频但容易被低估的技术需求。典型的处理链路涉及:多源PDF的文件流合并、页面级水印渲染(含透明度混合与图层叠加)、输出文件体积控制。看似简单的操作…

PDF拆分压完图糊了?2026国内免费实测,档案员都在用的组合方案

PDF拆分压完图糊了?2026国内免费实测,档案员都在用的组合方案

2026/7/26 0:04:02

说实话,提到PDF拆分再压缩,我真是被折腾得够呛。 上个月公司年度合同归档,一份300多页的PDF总合同,需要按年份拆分成三个独立文件,再分别压缩到10MB以内方便邮件发送各部门确认。我心想这还不简单?先找个海…