三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

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

如何在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++指针从基础到智能指针实战
← 返回列表