C++ 指针基础:开启内存操控之门
1. 指针为何如此重要
在 C++ 编程领域,指针堪称一项极为关键的特性。它赋予了程序员直接访问和操控内存的能力,这使得程序在处理复杂数据结构与优化性能时具有更高的灵活性。想象一下,在编写大型程序时,高效地管理内存资源是多么重要,而指针就是实现这一目标的有力工具。例如,在处理链表、树等动态数据结构时,指针能够帮助我们轻松地构建和遍历这些结构,极大地提高编程效率。
2. 指针基础:声明与初始化
指针本质上是一种变量,它存储的是其他变量在内存中的地址。要声明一个指针,需在类型名称后加上*。例如,声明一个指向int类型的指针:
int *ptr;
这里,ptr就是一个指向int类型数据的指针变量。然而,此时ptr并未指向任何有效的内存地址,这就需要对其进行初始化。
初始化指针有两种常见方式。一种是让它指向一个已存在的变量:
int num = 10;
int *ptr = #
这里的&是取地址运算符,它获取num变量的内存地址,并将其赋值给指针ptr,这样ptr就指向了num。
另一种初始化指针的方式是在动态分配内存时进行:
int *ptr = new int;
*ptr = 20;
new int在堆内存中分配了一块用于存储int类型数据的空间,并返回该空间的地址,赋值给ptr。然后通过解引用ptr(即*ptr)来给这块内存赋值。
3. 指针解引用:访问内存中的值
一旦指针指向了某个内存地址,我们就可以通过解引用运算符*来访问该地址中存储的值。例如:
int num = 10;
int *ptr = #
std::cout << "通过指针访问的值: " << *ptr << std::endl;
这里*ptr表示获取ptr所指向的内存地址中的值,也就是num的值。不仅如此,我们还能通过指针修改所指向的值:
*ptr = 30;
std::cout << "修改后的值: " << num << std::endl;
可以看到,通过修改*ptr,实际上修改了num的值,因为ptr指向了num的内存地址。
4. 指针与数组的紧密联系
在 C++ 中,数组与指针有着千丝万缕的联系。数组名本身就可以看作是一个指向数组首元素的常量指针。例如:
int arr[5] = {1, 2, 3, 4, 5};
int *ptr = arr;
这里arr和ptr都指向数组arr的首元素arr[0]。通过指针来访问数组元素,可以使用偏移量的方式:
for (int i = 0; i < 5; ++i) {std::cout << *(ptr + i) << " ";
}
ptr + i表示从指针ptr(即数组首元素地址)开始,偏移i个元素的地址,*(ptr + i)则获取该地址处的值,即arr[i]。
5. 总结
指针作为 C++ 的重要特性,为我们提供了深入内存操作的能力。理解指针的声明、初始化、解引用以及与数组的关系,是迈向 C++ 高级编程的重要一步。在后续的学习中,我们将进一步探索指针在动态内存管理、函数指针等方面的应用。
相关文章:
C++ 指针基础:开启内存操控之门
1. 指针为何如此重要 在 C 编程领域,指针堪称一项极为关键的特性。它赋予了程序员直接访问和操控内存的能力,这使得程序在处理复杂数据结构与优化性能时具有更高的灵活性。想象一下,在编写大型程序时,高效地管理内存资源是多么重要…...
Nginx的stream模块代理四层协议TCP的流量转发
Nginx的stream模块是一个功能强大的工具,专门用于处理四层协议(即网络层和传输层,如TCP和UDP)的流量。以下是对Nginx stream模块的详细解析: 一、基本功能 Nginx的stream模块主要用于实现TCP和UDP数据流的代理、转发…...
UE5 渲染管线 学习笔记
兰伯特 SSS为散射的意思 带Bias的可以根据距离自动切换mip的卷积值 而带Level的值mipmaps的定值 #define A8_SAMPLE_MASK .a 这样应该就很好理解了 这个只采样a通道 带Level的参考上面的 朝左上和右下进行模糊 带Bias参考上面 随机数 4D 3D 2D 1D...
Echarts连接数据库,实时绘制图表详解
文章目录 Echarts连接数据库,实时绘制图表详解一、引言二、步骤一:环境准备与数据库连接1、环境搭建2、数据库连接 三、步骤二:数据获取与处理1、查询数据库2、数据处理 四、步骤三:ECharts图表配置与渲染1、配置ECharts选项2、动…...
Electron 学习笔记
目录 一、安装和启动electron 1. 官网链接 2. 根据文档在控制台输入 3. 打包必填 4. 安装electron开发依赖 5. 在开发的情况下打开应用 6. 修改main为main.js,然后创建main.js 7.启动 二、启动一个窗口 1. main.js 2. index.html 3. 隐藏菜单栏 三、其他…...
Debian 12 安装配置 fail2ban 保护 SSH 访问
背景介绍 双十一的时候薅羊毛租了台腾讯云的虚机, 是真便宜, 只是没想到才跑了一个月, 系统里面就收集到了巨多的 SSH 恶意登录失败记录. 只能说, 互联网真的是太不安全了. 之前有用过 fail2ban 在 CentOS 7 上面做过防护, 不过那已经是好久好久之前的故事了, 好多方法已经不…...
http反向代理
通过反向代理实现访问biying,目前访问一些网站需要绕过cloudfare还没有解决,代码如下: from fastapi import FastAPI, Request from fastapi.responses import StreamingResponse import httpx import uvicorn import logging# 设置日志 logging.basicConfig(level=logging.…...
java12.24日记
运算符: 算术运算符: 顾名思义进行算数运算的 多为:四则运算,加一个取余 ,-,*,/以及 %(取余) 而外的:自增 以及自减--,对原数进行1或者-1 i…...
vue中proxy代理配置(测试一)
接口地址:http://jsonplaceholder.typicode.com/posts 1、配置一(代理没起作用) (1)设置baseURL为http://jsonplaceholder.typicode.com (2)proxy为 ‘/api’:’ ’ (3&a…...
[OpenGL]使用TransformFeedback实现粒子效果
一、简介 本文介绍了如何使用 OpenGL 中的 Transform Feedback 实现粒子效果,最终可以实现下图的效果: 本文的粒子系统实现参考了modern-opengl-tutorial, ogldev-tutorial28 和 粒子系统–喷泉 [OpenGL-Transformfeedback]。 二、使用 TransformFeed…...
GitCode 光引计划投稿 | GoIoT:开源分布式物联网开发平台
GoIoT 是基于Gin 的开源分布式物联网(IoT)开发平台,用于快速开发,部署物联设备接入项目,是一套涵盖数据生产、数据使用和数据展示的解决方案。 GoIoT 开发平台,它是一个企业级物联网平台解决方案ÿ…...
用 gdbserver 调试 arm-linux 上的 AWTK 应用程序
很多嵌入式 linux 开发者都能熟练的使用 gdb/lldb 调试应用程序,但是还有不少朋友在调试开发板上的程序时,仍然在使用原始的 printf。本文介绍一下使用 gdbserver 通过网络调试开发板上的 AWTK 应用程序的方法,供有需要的朋友参考。 1. 下载 …...
攻防世界web第一题
最近开始学习网络安全的相关知识,开启刷题,当前第一题 题目为攻防世界web新手题 这是题目 翻译:在这个训练挑战中,您将了解 Robots_exclusion_standard。网络爬虫使用 robots.txt 文件来检查是否允许它们对您的网站或仅网站的一部…...
轮播图带详情插件,插件
超级好用的轮播图 介绍访问地址参数介绍使用方法(简单使用,参数结构点击链接查看详情)图片展示 介绍 video(15) 带有底部物品介绍以及价格的轮播图组件,持续维护,uniApp插件,直接下载填充数据就可以在项目里…...
gesp(三级)(14)洛谷:B4039:[GESP202409 三级] 回文拼接
gesp(三级)(14)洛谷:B4039:[GESP202409 三级] 回文拼接 题目描述 一个字符串是回文串,当且仅当该字符串从前往后读和从后往前读是一样的,例如, aabaa \texttt{aabaa} aabaa 和...
ISO17025最新认证消息
ISO17025认证是国际上广泛认可的实验室管理标准,全称为《检测和校准实验室能力的通用要求》,由国际标准化组织(ISO)和国际电工委员会(IEC)联合发布。以下是对ISO17025最新认证消息及相关内容的归纳…...
ASP.NET Core Web API 控制器
文章目录 一、基类:ControllerBase二、API 控制器类属性三、使用 Get() 方法提供天气预报结果 在深入探讨如何编写自己的 PizzaController 类之前,让我们先看一下 WeatherController 示例中的代码,了解它的工作原理。 在本单元中,…...
RAID5原理简介和相关问题
1、RAID5工作原理 2、RAID5单块硬盘的数据连续吗? 3、RAID5单块硬盘存储的是原始数据,还是异或后的数据? 4、RAID5的分块大小 RAID5的分块大小一般选择4KB到64KB之间较为合适。选择合适的分块大小主要取决于以下几个考量因素࿱…...
Axure RP 8安装(内带安装包)
通过网盘分享的文件:Axure8.0.zip 链接: https://pan.baidu.com/s/195_qy2iiDIcYG4puAudScA 提取码: 6xt8 --来自百度网盘超级会员v1的分享 勾选I Agree 安装完成...
stm32定时器输出比较----驱动步进电机
定时器输出比较理论 OC(Output Compare)输出比较输出比较可以通过比较CNT与CCR寄存器值的关系,来对输出电平进行置1、置0或翻转的操作,用于输出一定频率和占空比的PWM波形每个高级定时器和通用定时器都拥有4个输出比较通道高级定时器的前3个通道额外拥有死区生成和互补输出…...
OFIRM,去感受宇宙之美的全貌!
奥卡姆剃刀,不增一分冗余;狄拉克,极致极简美学;我,多一个符号都是罪过!多一个单词都是对宇宙之神的亵渎。【宇宙之美,大道至简,原来如此!U(r,t)P{Φ(r,t)⊛⊂M,Ctotal(t)…...
终极指南:如何免费解锁Cursor Pro高级功能完整教程
终极指南:如何免费解锁Cursor Pro高级功能完整教程 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached your trial …...
大型木构建筑市场洞察:949.1亿到1811亿的跨越与竞争格局
在全球建筑行业向绿色低碳转型的大背景下,大型木构建筑凭借其独特的低碳环保特性与现代建筑的安全性及功能性,正成为行业关注的焦点。据恒州诚思调研统计,2025年全球大型木构建筑收入规模约949.1亿元,到2032年收入规模将接近1811.…...
国民技术N32G45x定时器:从时钟树到精准周期计算的实践解析
1. 国民技术N32G45x定时器入门指南 第一次接触N32G45x系列MCU的定时器功能时,我也被各种时钟配置搞得晕头转向。后来在实际项目中反复调试才发现,只要掌握几个关键点,定时器的使用其实并不复杂。N32G45x作为国民技术推出的高性能MCUÿ…...
周鸿祎西安交大演讲:AI时代青年的机遇与挑战
【赓续“西迁精神”,驾驭AI重塑竞争力】近日,西安交通大学迎来建校130周年暨西迁70周年纪念大会,360集团创始人、西安交大杰出校友周鸿祎重返母校发表主旨演讲。他勉励青年学子赓续“西迁精神”,坚守“解决真问题”的底色。在人工…...
跨境电商Shopify 的对接开发
在 2026 年的跨境电商环境中,Shopify 的对接开发已不再仅仅是“铺货”和“改模板”,而是向高度自动化(AI-Driven)、无头电商(Headless)以及全球本地化(Hyper-Localization)深度演进。…...
通俗易懂讲透超参数优化
通俗易懂讲透超参数优化(本科生/研究生都能看懂) 本文用大白话生活案例公式拆解完整代码,把超参数优化从概念、方法、对比到实战讲得清清楚楚,适合机器学习入门、面试复习、课程笔记。 一、先搞懂:什么是超参数优化&a…...
**标题:MLOps实战进阶:用Python+Docker+Kubernetes打造自动化模型部署流水
标题:MLOps实战进阶:用PythonDockerKubernetes打造自动化模型部署流水线 在现代机器学习工程中,模型从实验到上线的全流程自动化已成为企业级落地的关键瓶颈。传统手动部署模式不仅效率低下,还容易因环境差异导致“在我电脑上能跑…...
高性能客服系统技术内幕:通过 SpinWait 自旋等待结构体提升高频消息分发性能勘
1. 智能软件工程的范式转移:从库集成到原生框架演进 在生成式人工智能(Generative AI)从单纯的文本生成向具备自主规划与执行能力的“代理化(Agentic)”系统跨越的过程中,.NET 生态系统正在经历一场自该平台…...
终极解决方案:Windows 10 OneDrive 彻底卸载专业指南
终极解决方案:Windows 10 OneDrive 彻底卸载专业指南 【免费下载链接】OneDrive-Uninstaller Batch script to completely uninstall OneDrive in Windows 10 项目地址: https://gitcode.com/gh_mirrors/on/OneDrive-Uninstaller 在Windows 10系统中…...
