news 2026/6/18 14:19:17

如何在C++中正确地使用和操作指针?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何在C++中正确地使用和操作指针?

C++指针正确使用与操作(精简完整版)

一、指针基础定义

指针是存储变量内存地址的变量,格式:类型* 指针名

inta=10;int*p=&a;// &取地址,p存放a的地址*p=20;// *解引用,修改地址对应的值

二、核心基础操作

  1. & 取地址:获取变量内存地址
  2. *** 解引用**:通过地址访问对应数据
  3. 赋值:同类型指针才能互相赋值

三、各类指针规范用法

1. 普通变量指针

intnum=5;int*ptr=&num;cout<<*ptr;// 输出5

2. 数组指针

数组名本质首元素地址,无需加&

intarr[3]={1,2,3};int*p=arr;*(p+1)=99;// 修改第二个元素

3. 函数指针

存储函数地址,用于回调

voidtest(){}void(*fp)()=test;fp();// 调用函数

4. const指针(三种,极易踩坑)

  1. const int* p:指针可改,指向的值不可改
  2. int* const p:指针本身地址固定,值可改
  3. const int* const p:地址、值全都不能修改

5. 二级指针int** p

存放一级指针的地址,多用于动态数组、函数修改外部指针

四、动态内存 new / delete(重点规范)

单个变量

int*p=newint(100);// 开辟堆内存deletep;// 释放内存p=nullptr;// 置空,防止野指针

数组

int*arr=newint[5];delete[]arr;// 数组必须加[]释放arr=nullptr;

规则:

  • new必须配对delete,否则内存泄漏
  • 释放后立刻赋值nullptr,杜绝野指针

五、安全使用准则(避坑核心)

  1. 禁止野指针
    未初始化、已释放的指针都是野指针,访问直接崩溃。
    定义时直接初始化:int* p = nullptr;

  2. 不要返回局部变量地址
    局部变量存栈,函数结束自动销毁,返回地址会失效。

    int*badFunc(){intx=1;return&x;// 错误!}
  3. 指针越界禁止访问
    数组指针p+n不能超出数组长度,会篡改其他内存。

  4. 不同类型指针禁止随意强转
    类型不匹配会造成取值错乱。

  5. 空指针判断
    使用前先判断:if(p != nullptr),避免空指针崩溃。

  6. 堆内存谁开辟谁释放
    new和delete成对,不重复释放同一块内存。

六、C++现代替代方案(优先推荐)

尽量少用裸指针,用智能指针自动管理内存,无需手动delete:

  • unique_ptr:独占资源,性能高
  • shared_ptr:共享资源,计数回收
#include<memory>unique_ptr<int>p=make_unique<int>(10);// 自动释放,不用delete

配套标题可选

  1. C++指针完整使用规范与避坑指南
  2. 一文吃透C++指针操作、内存管理
  3. C++裸指针安全使用全套教程
  4. C++指针从基础到智能指针实战
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/18 14:12:23

ESP32 LVGL Gui-Guider工程集成实战:从生成代码到屏幕点亮

1. ESP32与LVGL开发环境准备 在开始集成Gui-Guider生成的代码之前&#xff0c;我们需要确保ESP32开发环境和LVGL库已经正确配置。ESP32作为一款性价比极高的Wi-Fi/蓝牙双模芯片&#xff0c;搭配LVGL这个轻量级图形库&#xff0c;可以轻松实现各种炫酷的界面效果。 首先&#xf…

作者头像 李华
网站建设 2026/6/18 14:10:06

DSP28335驱动OLED12864:从软件模拟IIC到界面显示实战

1. DSP28335与OLED12864的硬件连接基础 第一次用DSP28335驱动OLED12864屏幕时&#xff0c;最让我头疼的就是硬件连接问题。市面上常见的0.96寸OLED模块有两种引脚排列版本&#xff0c;VCC和GND的位置居然是相反的&#xff01;我当年就因为这个烧坏过一块屏幕&#xff0c;现在想…

作者头像 李华
网站建设 2026/6/18 13:56:12

Java新手速成教程:接口 + 内部类

一、什么是接口&#xff08;interface&#xff09;1. 核心定义- 关键字&#xff1a;interface - 接口是「纯粹的规则/标准」&#xff0c;只定义功能&#xff0c;不做具体实现。 - 类比&#xff1a;接口是说明书&#xff0c;类是真正造出来的产品。2. 接口的最大特点1. 接口多继…

作者头像 李华