讲师中心 微信公众号
AI工具推荐 视频效率加速

C++怎么使用指针_C++指针详解教程【必学】

秋磊酱_5468

秋磊酱_5468

发布时间:2026-02-24 11:53:22

|

268人浏览过

|

来源于php中文网

原创

指针声明必须初始化为nullptr,未初始化指针值随机;动态分配后需检查,释放后置nullptr防悬空;new/delete与malloc/free不可混用;数组须配对使用new[]/delete[];函数参数按是否可空选引用或指针;shared_ptr循环引用需weak_ptr破环;指针生命周期不得短于使用范围。

c++怎么使用指针_c++指针详解教程【必学】

指针变量声明时必须初始化或明确赋值

不初始化的指针(尤其是局部指针)内容是随机内存地址,delete 或解引用会直接崩溃。很多新手以为 int* p; 是“空指针”,其实它只是未定义值,不是 nullptr。

  • 声明即初始化:用 nullptr(C++11 起推荐),不要用 NULL 或 0 —— 后两者在函数重载场景可能引发歧义
  • 动态分配后立刻检查:比如 int* p = new int(42); if (!p) return;,虽然现代系统极少失败,但嵌入式或资源受限环境仍需防御
  • 避免“悬空指针”:释放后立即置为 nullptr,比如 delete p; p = nullptr;,否则后续误用 if (p) 判断会失效(因为悬空指针非空但非法)

new / delete 和 malloc / free 不能混用

new 不仅分配内存,还会调用构造函数;delete 会调用析构函数。而 malloc / free 是纯 C 内存操作,不触发任何对象生命周期管理。混用会导致对象状态损坏、资源泄漏或未定义行为。

  • 类对象必须用 new/delete:比如 std::string* s = new std::string("hello"); delete s; —— 用 free(s) 不会调用析构函数,内部缓冲区不会释放
  • 原始内存块可用 malloc,但别对它调用 delete;反之亦然。编译器通常不报错,运行时崩得无声无息
  • 数组要配对:用 new[] 就必须用 delete[],否则只调用第一个元素的析构函数,其余被跳过

指针和引用在函数参数中怎么选

传参选指针还是引用,关键看“是否允许传入空值”和“是否需要重新绑定”。引用本质是别名,天生非空且不可重绑;指针更灵活,但也更易出错。

C++14
C++14

C++14 对 C++11 的修正与增强版本,适合旧系统维护和较老工具链兼容。

下载
  • 如果函数逻辑上必须有有效对象(比如修改一个 std::vector),优先用 std::vector& —— 编译器强制你传实参,不用写 if (!v) 检查
  • 如果参数可选(比如日志回调可为空),必须用指针:void process(int* opt_data),调用方可以传 nullptr
  • 别为了“看起来安全”把所有参数都改成引用:比如 void swap(int& a, int& b) 没问题,但 void load_config(Config& cfg) 如果内部可能做 cfg = Config{};,就隐含了“修改原对象”的契约,调用方未必意识到

智能指针不是万能的,循环引用得手动破

std::shared_ptr 用引用计数管理生命周期,但两个对象互相持有对方的 shared_ptr,计数永远不归零,内存就漏了。这不是 bug,是设计使然。

立即学习“C++免费学习笔记(深入)”;

  • 典型场景:树节点父子互持、观察者模式中主体与监听器双向引用
  • 破环靠 std::weak_ptr:子节点存父节点用 weak_ptr,访问前用 lock() 转成临时 shared_ptr,既安全又不增加计数
  • 别滥用 weak_ptr:它带来额外开销(控制块多一次原子操作),且每次访问都要判断是否已释放 —— 只在确认有循环风险时才引入

实际写代码时,最容易被忽略的是:指针的生命周期必须比它的使用范围长。哪怕语法全对,只要 int* p = &x; 中的 x 是函数局部变量,返回 p 就是野指针 —— 这种错误不报编译警告,调试器里看到的值还常常“碰巧”是对的。

热门AI工具

更多
超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

6779

2023.08.02

c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

549

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

1698

2024.03.01

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

6779

2023.08.02

int占多少字节
int占多少字节

int占4个字节,意味着一个int变量可以存储范围在-2,147,483,648到2,147,483,647之间的整数值,在某些情况下也可能是2个字节或8个字节,int是一种常用的数据类型,用于表示整数,需要根据具体情况选择合适的数据类型,以确保程序的正确性和性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

3265

2024.08.29

c++怎么把double转成int
c++怎么把double转成int

本专题整合了 c++ double相关教程,阅读专题下面的文章了解更多详细内容。

4228

2025.08.29

C++中int的含义
C++中int的含义

本专题整合了C++中int相关内容,阅读专题下面的文章了解更多详细内容。

2885

2025.08.29

javascriptvoid(o)怎么解决
javascriptvoid(o)怎么解决

javascriptvoid(o)的解决办法:1、检查语法错误;2、确保正确的执行环境;3、检查其他代码的冲突;4、使用事件委托;5、使用其他绑定方式;6、检查外部资源等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

636

2023.11.23

Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

20

2026.10.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C++ Core Guidelines
C++ Core Guidelines

共0课时 | 0人学习

C++ Reference
C++ Reference

共0课时 | 0人学习

C++ 官方标准说明
C++ 官方标准说明

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn