- 博客(194)
- 收藏
- 关注
原创 一文搞懂 ROS2 C++ 订阅节点类成员
本文详细解析了一个ROS2 C++订阅节点类LimoTopicSub的实现原理。该类通过继承rclcpp::Node获得ROS2节点基础能力,主要包含三部分核心成员: 构造函数LimoTopicSub():初始化节点并创建/cmd_vel话题订阅者,使用std::bind绑定回调函数cmd_callback()。 成员变量cmd_sub_:以智能指针形式保存订阅者对象,确保节点运行期间订阅关系持续有效。 回调函数cmd_callback():自动处理接收到的geometry_msgs::msg::Twist
2026-07-20 23:10:40
213
原创 Git fetch、merge 与 pull 有什么区别?一文搞懂本地分支、远程跟踪分支和工作区
本文详细解析了Git中git fetch、merge和pull命令的区别及使用场景。fetch仅下载远程更新到本地仓库并更新远程跟踪分支,不改变本地分支和工作区;merge则将远程更新整合到当前本地分支,从而更新工作区代码;pull相当于fetch+merge的组合操作。文章还介绍了Git工作区、暂存区、本地仓库和远程仓库的关系,区分了本地分支与远程跟踪分支的不同,并给出了学习分支安全同步公司代码的操作建议:先commit个人修改,再fetch远程更新,最后merge到本地分支。此外强调了多仓库项目需保持版
2026-07-20 11:51:41
461
原创 公司 GitLab 从零配置保姆级教程(二):五仓库拉取、git fetch、origin 与本地学习分支一文搞懂
本文详细介绍了如何组织和管理MotionControl2.0项目的五个Git仓库,包括克隆仓库、创建本地学习分支以及使用VSCode进行代码阅读和注释。主要内容包括: 项目五个仓库的结构和关系:fhmcapp(主工程)、libmcbase、libmcdevice、libmcmodule和libmcservice必须放在同一级目录下,以确保相对路径引用正确。 创建本地学习分支的正确方法:通过git fetch origin更新远程信息后,基于远程跟踪分支(如origin/feature/master_85_f
2026-07-19 12:12:29
553
原创 公司 GitLab 从零配置保姆级教程(一):LDAP、2FA、U2F、Authenticator 与 Access Token 一文搞懂
本文记录公司 GitLab 从账号登录、LDAP 认证、双因素认证,到 Git 配置、Personal Access Token 创建和仓库克隆的完整流程,并说明常见认证报错、网络访问及 Windows 凭据缓存问题的解决方法,为后续多仓库分支管理做好准备。
2026-07-19 02:37:46
208
原创 ROS2 C++ 运动控制算法保姆级教程
本文是ROS2 C++系列第四篇,聚焦于AGV底盘运动控制算法的常见C++实现方式。文章系统性地讲解了底盘控制中关键编程模式: 核心封装结构 class用于封装算法模块(PID控制器、运动学模型) struct管理状态数据(RobotState保存位姿/速度,ChassisParam存储机械参数) enumclass规范控制模式(STOP/MANUAL/AUTO等) 关键标准库工具 std::vector管理动态数据(路径点序列) std::array处理固定尺寸数据(轮速数组) std::clamp实现安
2026-06-24 11:30:56
748
原创 ROS2 C++ 基础语法保姆级教程
这篇文章是ROS2 C++系列教程的第三部分,重点讲解了ROS2代码中常见的C++基础语法。文章面向学习ROS2 C++时容易被语法卡住的初学者,通过解析实际代码中常见的语法结构,帮助读者理解ROS2代码背后的C++实现原理。 主要内容包括: C++文件结构(#include、main函数) 变量与类型(auto、const、数据类型) 类与对象(class、public/private、构造函数、成员变量) 指针与智能指针(SharedPtr、make_shared) 函数相关(this指针、.和->
2026-06-24 00:06:28
419
2
原创 ROS2 C++ 进阶语法保姆级教程
本文系统梳理了ROS2 C++开发中的常见编程模式与核心组件分类,形成完整的知识框架。主要内容包括: 基础结构:程序入口(init/spin/shutdown)、节点生命周期、spin系列方法区别 通信机制:Topic发布订阅、Service同步通信、Action长任务通信的完整实现模式 核心工具:参数系统、日志输出、时间管理、拓扑查询的典型用法 高级特性:QoS策略、多线程执行器、回调组管理、生命周期节点的应用场景 机器人专用:tf2坐标变换、多传感器同步(message_filters)等机器人场景关键
2026-06-23 11:35:09
532
原创 ROS2 C++ 常见 rclcpp 写法保姆级教程
本文总结了ROS2 C++编程中最常见的rclcpp库用法。主要内容包括:1. ROS2程序基本结构(init、spin、shutdown)2. 节点类(继承rclcpp::Node)3. 发布者(Publisher)和订阅者(Subscription)的创建与使用4. 定时器(TimerBase)的使用方法5. C++相关语法解析(::、<>、SharedPtr、this->、std::bind等)文章通过代码示例详细讲解了ROS2 C++节点开发的核心组件及其使用方法,帮助开发者快速理
2026-06-23 00:03:13
416
原创 ROS2 C++ 小车控制完整实战(四):自定义 Action 通信保姆级教程
本文介绍了ROS2中Action通信机制,适用于长时间任务场景。文章对比了Topic、Service和Action三种通信方式的特点:Topic适合持续数据流(如速度控制),Service适合短时请求响应(如开关指令),而Action专为长时间任务设计(如导航巡检),支持过程反馈和最终结果。通过自定义LimoAction.action接口,演示了如何实现小车运动控制:客户端发送速度目标(Goal),服务端执行并反馈进度(Feedback),任务完成后返回结果(Result)。文中提供了完整的服务端和客户端代
2026-06-22 01:33:19
509
原创 ROS2 C++ 回调函数 保姆级教程
本文深入解析ROS2 C++开发中的回调函数机制。主要内容包括:1. 回调函数概念:被动触发执行的函数,与主动调用的普通函数形成对比,是ROS2事件驱动架构的核心。2. 四种回调场景: Topic回调:消息到达时触发(如/cmd_vel订阅) Timer回调:周期性触发(如500ms定时发布) Service回调:服务请求时触发(含request/response参数) Action回调:任务各阶段触发(目标、反馈、结果)3. 关键技术点: std::bind绑定类成员函数 this指针表示当前节点对象 占
2026-06-22 01:17:48
427
原创 ROS2 C++ 小车控制完整实战(三):自定义 srv 服务通信保姆级教程
本文介绍了ROS2中Service通信的使用方法,重点讲解了如何通过自定义srv接口实现小车控制。主要内容包括: 自定义srv接口LimoSrv.srv的定义,包含x/y/z速度请求和success响应,使用---分隔请求和响应部分。 配置limo_msgs接口包,通过rosidl_generate_interfaces生成C++接口代码。 编写服务端节点limo_srv_server,接收请求后将x/y/z转换为Twist消息发布到/cmd_vel,并返回执行结果。 编写客户端节点limo_srv_cli
2026-06-11 22:41:47
243
原创 ROS2 C++ 小车控制完整实战(二):自定义 msg 消息发布与订阅保姆级教程
本文介绍了在ROS2中如何自定义消息接口(msg)并实现发布与订阅功能。主要内容包括: 自定义消息LimoStatus.msg的定义与配置 创建包含车辆状态、电池电压等字段的自定义消息 配置接口包limo_msgs的CMakeLists.txt和package.xml C++实现消息发布节点 创建周期性发布LimoStatus消息的发布者 设置消息头和时间戳 填充自定义字段并发布 C++实现消息订阅节点 创建订阅/limo_status话题的订阅者 编写回调函数处理接收到的消息 编译与测试流程 先编译接口包
2026-06-11 13:45:42
519
原创 ROS2 C++ 小车控制完整实战(一):官方标准 msg 消息发布与订阅保姆级教程
本文是一篇关于ROS2 C++通信实践的详细教程,重点讲解了如何通过Topic、Service和Action三种通信方式控制LIMO移动机器人。文章分为五个部分: Topic通信:使用geometry_msgs/msg/Twist消息控制小车速度,包括发布和订阅/cmd_vel话题的完整代码实现; 雷达数据处理:订阅/scan话题获取激光雷达数据,实现简单的避障逻辑; 自定义接口:介绍了LimoStatus.msg、LimoSrv.srv和LimoAction.action三种自定义消息类型的定义; 工程配
2026-06-09 20:53:12
523
原创 ROS2 编译与运行基本流程:colcon build、source 与 ros2 run 一文搞懂
本文深入解析ROS2的编译与运行流程,帮助开发者理解从源码到可执行文件的完整链路。主要内容包括: 核心编译流程 colcon build的作用及生成目录(build/install/log) install空间的重要性:存放运行时真正使用的可执行文件 单独编译功能包的方法(--packages-select) 关键运行机制 source install/setup.bash的必要性:刷新终端环境变量 ros2 run的工作原理:通过package.xml和CMakeLists.txt定位节点 完整运行链路:
2026-06-09 03:42:34
331
原创 ROS2 功能包配置文件详解:package.xml 与 CMakeLists.txt 一文搞懂
本文详细讲解了ROS2功能包中两个关键配置文件的作用与编写方法。主要内容包括: package.xml文件 功能包描述文件,声明名称、版本、维护者等信息 通过<depend>标签声明功能包依赖关系 必须与代码中实际使用的依赖包保持一致 CMakeLists.txt文件 C++功能包的编译规则文件 四个核心语句: find_package:查找依赖包 add_executable:生成可执行程序 ament_target_dependencies:为目标程序添加依赖 install:安装可执行文件
2026-06-08 23:03:40
472
原创 一文搞懂 ROS2 工程结构:工作空间、功能包、msg/srv/action 自定义接口
本文是《松灵ROS2》第4讲的笔记,主要介绍ROS2代码实践中的工程结构基础。文章首先讲解工作空间的组织结构,包括src源码空间、build编译空间、install安装空间和log日志空间的功能与关系。其次说明功能包作为ROS2代码管理的基本单位,包含CMakeLists.txt和package.xml两个核心文件,并区分了C++与Python功能包的不同。重点介绍了三种自定义通信接口:msg用于Topic发布订阅,srv用于服务请求响应,action适用于长时间任务。文章强调修改代码后需重新编译才能生效,
2026-06-08 18:00:59
610
原创 卡帕西 AI 编程神级指令!Codex / Claude / Cursor 通用 AGENTS.md 保姆级教程
本文介绍了GitHub热门项目andrej-karpathy-skills,该项目整理了Andrej Karpathy提出的AI编程行为准则,旨在约束Codex、ClaudeCode、Cursor等AI编程工具的行为。核心内容包括四条规则:编码前先思考、保持简洁、精准修改和目标导向执行。文章详细说明了如何获取适用于不同工具的规则文件(AGENTS.md、CLAUDE.md、.cursor/rules/karpathy-guidelines.mdc),并对比了三者的异同。最后给出使用建议:补充项目特定规则、多
2026-06-07 23:27:13
7260
原创 史上最全 ROS2 常用命令保姆级教程:节点、话题、消息结构、参数、服务和动作一篇讲透
本文系统整理了ROS2开发中最常用的终端调试命令,帮助初学者掌握ROS2工程调试方法。主要内容包括: 核心调试命令分类 ros2node:查看节点信息 ros2topic:调试话题通信 ros2interface:查看消息结构 ros2service:调试服务通信 ros2action:调试动作通信 ros2param:参数管理 ros2run/ros2launch:运行节点和工程 重点命令详解 话题调试:list/info/echo/pub/hz等 消息结构查看:interfaceshow 参数管理:ge
2026-06-06 00:31:30
893
原创 ROS2 话题通信实战:消息对象、Publisher 发布器与 Subscriber 订阅器保姆级教程
本文介绍了ROS2话题通信实战,重点讲解消息对象创建、Publisher和Subscriber的实现方法。以geometry_msgs::msg::Twist消息为例,详细说明了如何创建速度控制消息(包含linear.x和angular.z字段赋值)、编写发布器节点(周期性发布/cmd_vel话题)和订阅器节点(接收并打印速度信息)。特别强调了发布端使用点号访问普通对象字段,订阅端通过箭头访问智能指针消息的区别。通过完整代码示例,展示了ROS2话题通信的核心实现流程,帮助读者掌握移动机器人速度控制的消息发布
2026-06-05 18:08:46
479
原创 ROS2 常见消息类型保姆级教程
本文深入解析了ROS2中的消息通信机制,重点讲解了geometry_msgs::msg::Twist vel_cmd;这行代码的含义及其应用。主要内容包括: ROS2消息类型本质:节点间通过标准消息(而非普通变量)通信,命名规则为功能包名::msg::消息名 常见消息类型: std_msgs:基础数据类型(String/Int32等) geometry_msgs:核心运动消息(Twist速度控制、Pose位姿描述等) nav_msgs:导航相关(Odometry里程计、Path路径等) sensor_msg
2026-06-05 02:51:08
781
原创 Codex Skill 保姆级教程 2:AnySearch — 让 Agent 联网搜索更省 Token、更高效
摘要: AnySearchSkill专为优化Codex的联网搜索效率设计,解决Agent直接访问网页时因读取大量无关内容(广告、导航栏等)导致的Token过度消耗问题。其核心原理是将搜索任务交由AnySearch API处理,后者负责检索、筛选并返回结构化结果(如Markdown),避免Codex直接解析冗余网页内容。AnySearch支持通用/垂直搜索、并行批量查询及全文提取,通过API或Skill无缝接入Codex,使其更专注于信息推理与任务执行,而非低效的网页遍历。这种分工显著减少搜索轮次和Token
2026-06-04 15:26:54
2916
原创 Codex Skill 保姆级教程 1:Computer Use — 让 AI 接管整台电脑
以前在 Windows 电脑上使用 Codex,更多是通过浏览器、项目目录、终端或代码环境来完成开发任务。现在 Codex 的 Computer Use 电脑操控功能 已经支持 Windows,意味着 Codex 不仅能看代码、改代码、跑命令,还可以像真人一样看屏幕、点按钮、输入文字、切换窗口,直接操作电脑上的应用程序。OpenAI 官方说明中提到,Codex App 支持 Windows,并且可以在 Windows 上通过 PowerShell、Windows 沙箱或 WSL2 运行相关工作流。
2026-06-03 22:55:25
11162
原创 C++零基础到工程实战(5.2.8)多文件声明定义函数和全局变量
本文介绍了C++多文件编译的核心概念和实践方法。主要内容包括:1. 多文件编译的必要性:解决单文件代码量大时维护困难、结构混乱等问题,通过拆分.h头文件(声明)、.cpp源文件(定义)和main文件(调用)来组织代码。 文件分工原则: .h文件:放置函数声明、extern全局变量声明、类声明等接口 .cpp文件:实现具体定义(全局变量定义、函数实现) main.cpp:调用接口实现程序功能 关键注意事项: 全局变量应在.h中用extern声明,在.cpp中定义 使用#pragma once或#ifndef防
2026-06-01 18:24:09
397
原创 C++零基础到工程实战(5.2.7):函数与vector数组和引用
本文详细讲解 C++ 中函数与 vector、引用、移动语义之间的关系,包括 vector 的基本内存结构、for(auto d)、for(auto& d)、const auto& 的区别,vector 作为函数参数时传值会发生复制,引用传参如何避免复制,以及 std::move 如何通过移动语义减少 vector 内部数据拷贝。同时结合 data() 地址变化分析传值、引用和 move 的本质区别,帮助初学者理解 C++ 中 vector 传参和返回值的真实过程。
2026-06-01 13:02:55
465
原创 C++零基础到工程实战(5.2.6):函数与数组和数组引用
在前面几节中,我们已经学习了函数参数、返回值、指针、引用以及函数重载等内容。本节继续围绕函数展开,重点讲解一个非常容易混淆的问题:数组作为函数参数时,到底传进去的是整个数组,还是数组首元素地址?很多初学者会写出这样的代码:然后以为可以得到整个数组大小。但实际运行时,可能会发现:main 函数中 sizeof(datas) = 40函数内部 sizeof(datas) = 8数组作为普通函数参数传递时,会退化为指针。本节先只讲基础数组和数组引用。
2026-05-31 23:57:55
104
原创 Claude 保姆级教程!桌面版安装并接入 DeepSeek V4 Pro
本文详细介绍了在Windows11系统中安装Claude桌面版并通过CCSwitch路由工具接入DeepSeekV4Pro大模型的完整流程。主要内容包括:ClaudeDesktop图形客户端与ClaudeCode命令行工具的区别、安装前的Git/CCSwitch/APIKey准备工作、从官网下载安装ClaudeDesktop的注意事项、通过CCSwitch配置DeepSeek模型映射的关键步骤(包括添加供应商、设置模型角色映射、检查版本更新),以及启动本地路由服务后的验证方法。教程重点强调了安装后需完全退出
2026-05-31 01:48:35
3340
2
原创 Claude Code 保姆级使用教程!零基础从安装到接入 DeepSeek V4 Pro
本文以 Windows 11 为例,详细介绍 Claude Code 的安装与 DeepSeek V4 Pro 接入流程,包括 Node.js、npm、Git、CC-Switch 环境配置,PowerShell 执行策略问题解决,Claude Code 全局安装与版本验证,.claude.json 引导跳过配置,以及通过 CC-Switch 添加 DeepSeek API Key、模型映射和 1M 上下文设置。最后通过 /model 命令验证模型是否接入成功,帮助开发者快速搭建终端 AI 编程环境。
2026-05-30 18:31:53
1929
4
原创 一篇文章搞懂移动机器人底盘里程计更新代码
本文详细讲解了一个基于C++的二维机器人里程计实现代码。代码通过Pose2D结构体封装机器人的位姿信息(x,y,theta),使用引用传参方式实现位姿更新函数。核心算法采用欧拉积分法,根据线速度和角速度逐步计算并累计机器人的位置和朝向变化。文章重点解析了结构体定义、引用传参机制、位姿初始化方式以及运动学更新原理,并讨论了实际工程应用中需要注意的问题,如角度归一化、误差累积等。这段代码虽然简短,但包含了机器人运动控制的基础知识,为后续学习更复杂的导航定位算法打下基础。
2026-05-29 17:30:39
238
原创 轮式移动机器人底盘轮子名称全解析
本文系统梳理了移动机器人底盘常见的轮子类型及其功能特点。文章从功能分类、结构分类和底盘模型三个维度,详细解析了驱动轮、转向轮、随动轮、支撑轮、舵轮、全向轮、麦克纳姆轮等概念的区别与联系,并针对初学者常见的混淆问题进行了重点说明。通过功能对比表和底盘组成分析,帮助读者快速掌握移动机器人轮子的核心特征:判断轮子性质主要看三方面(是否有动力、能否转向、是否被动支撑),不同底盘结构由特定轮子组合实现不同运动性能。文中特别强调舵轮兼具驱动和转向功能,差速轮是控制方式特殊而非结构特殊,全向轮与麦克纳姆轮在滚子布置上的差
2026-05-29 09:44:47
612
原创 移动机器人底盘运动学模型全解析
本文系统介绍了移动机器人底盘控制的核心逻辑与运动学模型实现。主要内容包括:1. 底盘控制基本框架:上位机发送整体速度指令,底盘控制器完成运动学逆解、电机控制和状态反馈。2. 典型底盘模型详解: 两轮/四轮差速底盘的速度分解公式与实现代码 阿克曼底盘转向几何模型及工程限制条件 麦克纳姆轮三自由度运动分解方法 轮速与电机RPM的转换原理 里程计计算方法及多传感器融合思路 工程实践中的关键注意事项,包括参数标定、误差补偿和调试流程。文章通过C++代码示例展示了各模型的实现方法,并比较了不同底盘类型的控制难点,为移
2026-05-28 18:36:44
1056
原创 一文搞懂移动机器人底盘结构模型
本文系统介绍了移动机器人底盘的类型、结构特点及应用场景。主要内容包括:1)底盘作为机器人的运动执行机构,决定了机器人的机动性、通过性和稳定性;2)详细解析了差速类(两轮/四轮/履带)、汽车式(阿克曼)、全向类(麦克纳姆轮/全向轮)和舵轮类(单/双/四舵轮)等底盘的工作原理、运动特点及优劣势;3)针对不同应用场景(如室内AGV、户外无人车、复杂地形、重载运输等)提供了底盘选型建议。文章强调底盘选择需结合实际需求,平衡性能、成本和控制复杂度,为机器人开发者提供了实用的技术参考。
2026-05-28 13:05:49
1365
原创 C++零基础到工程实战(5.2.5):函数默认参数和函数重载
本文详细介绍了C++中的函数默认参数和函数重载两个重要特性。函数默认参数允许在调用时省略部分参数,但必须从右往左连续设置,且默认参数只能指定一次,通常写在函数声明中。函数重载允许同名函数处理不同类型的参数,区分依据是参数列表而非返回值。文章还指出了常见问题:double类型参数在重载调用中可能引发歧义,建议使用显式类型转换;在C++中应优先使用nullptr而非NULL来表示空指针。通过具体代码示例,文章展示了如何正确使用这些特性,并解释了编译器在参数匹配时的处理机制。
2026-05-27 16:38:44
517
原创 ROS2 xacro 保姆级使用教程!零基础从入门到精通
文章主要讲的是 LIMO 简化四轮 xacro 模型,包括 xacro:property、xacro:macro、link、joint、visual、collision、inertial,以及 xacro 转 URDF、RViz 查看和常见问题记录。
2026-05-26 23:55:52
720
原创 【松灵ROS2专栏·第 3 讲】ROS的URDF编写和Gazebo仿真控制
本文介绍了ROS2中机器人建模与仿真的核心内容,重点讲解了URDF/Xacro语法和Gazebo仿真应用。主要内容包括:1)URDF基础:详细解析了link和joint的组成要素,包括inertial物理属性、visual可视化效果和collision碰撞检测;2)LIMO机器人实例:展示了如何通过URDF描述机器人结构,包括底盘、传感器等模块的连接关系;3)Gazebo仿真:介绍了加载机器人模型、添加传感器插件、控制机器人运动的方法;4)可视化调试:讲解了在RViz中查看激光雷达、相机等传感器数据的技巧。
2026-05-26 18:47:57
629
原创 Claude Code、Codex、Cursor 与 MCP 协议深度解析:AI 编程工具到底怎么选?
本文系统梳理了AI编程工具的核心概念与区别:1. 区分了IDE(开发环境)、AI编码助手(辅助工具)和AI原生编辑器(如Cursor)三类工具;2. 详解ClaudeCode和Codex作为AI编码代理的定位与功能;3. 澄清MCP协议是连接工具与上下文的接口标准,而非模型接入协议;4. 说明ClaudeCode主要适配官方Claude模型,其他模型需通过兼容接口或网关转换。通过分类对比,帮助开发者清晰理解各类工具的定位与适用场景。
2026-05-25 23:13:38
895
原创 联想拯救者 Y9000P 常用快捷键与功能详解
本文总结了联想拯救者Y9000PIRX8笔记本的实用快捷键操作指南,包括触摸板开关(Fn+F10)、键盘背光调节(Fn+空格)、性能模式切换(Fn+Q)、屏幕刷新率调整(Fn+R)等核心功能。详细介绍了灯光控制(Fn+L/U)、显示模式切换(Win+P)以及黑屏应急处理(Win+Ctrl+Shift+B)等实用技巧,并解释了不同性能模式对应的电源灯颜色变化(蓝/白/红)。针对不同使用场景提供了优化设置建议,帮助用户快速掌握笔记本的各项功能操作,提升使用体验。
2026-05-25 03:01:48
1447
原创 Codex 保姆级使用教程!零基础从入门到精通
Codex是一款AI编程助手,它不仅能像ChatGPT一样回答问题,更能直接操作项目文件、执行任务。与ChatGPT不同,Codex可以分析项目结构、修改代码、生成内容并运行命令,最后将改动展示给用户确认。它支持多种使用方式,包括CLI命令行、桌面客户端和IDE插件,适合网页开发、脚本编写、文档生成等多种场景。Codex具有计划模式、权限控制、Git集成等功能,能确保操作安全可靠。用户可以通过AGENTS.md文件为项目制定规则,指导AI的工作方式。这款工具特别适合开发者用来提高工作效率,既能处理简单任务,
2026-05-22 18:50:44
13775
2
原创 一篇文章讲清楚—Windows 电脑中 CMD 和 PowerShell 有啥区别
本文对比了Windows系统中的CMD和PowerShell两种命令行工具。CMD是传统命令行界面,语法简单,适合执行基础命令和批处理脚本;PowerShell则是更强大的现代工具,支持对象管道、脚本自动化和系统管理,并兼容许多Linux风格的命令别名。文章从基本概念、命令差异、Linux兼容性、优缺点、使用场景等方面进行分析,指出CMD适合简单操作和老脚本,而PowerShell更适合开发、运维等复杂任务。建议用户先掌握CMD基础命令,再逐步过渡到功能更强大的PowerShell。
2026-05-21 20:43:45
832
原创 C++零基础到工程实战(5.2.4):指针与引用在函数传参、返回值与效率优化中的应用
本文系统讲解了指针和引用在函数参数和返回值中的应用。主要内容包括:1. 指针和引用作为函数参数的用法区别,指针需传地址(&x),引用直接传变量(x);2. const修饰指针和引用的三种情况:限制指向数据(const int*)、限制指针地址(int* const)、两者都限制(const int* const);3. 使用const引用(const string&)传递大对象可避免复制;4. 指针和引用可作为输出参数返回多个值,也可作为函数返回值,但需注意不能返回局部变量的地址或引用。核心
2026-05-21 20:05:43
568
原创 C++零基础到工程实战(5.2.3):栈区变量与函数返回指针、引用问题
本文摘要:本文深入探讨了C++函数返回指针和引用的安全性问题。重点分析了栈区变量的生命周期,指出普通局部变量在函数结束后会被销毁,因此不能返回其地址或引用。文章详细解释了栈区变量的类型(包括局部变量、数组、形参、对象和指针变量本身),并通过示例说明返回局部变量地址或引用会导致访问无效内存的错误。同时,文章总结了安全的返回方式:可以返回值、static变量或堆区地址(需手动释放),推荐使用智能指针管理堆内存。核心结论是:函数不能返回普通局部变量的地址或引用,因其生命周期仅限于函数内部。
2026-05-21 13:14:54
557
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅