C++ 指针

1. 指针基础

指针是存储内存地址的变量。

复制代码
复制代码
复制代码
int var = 10;       // 整型变量
int* ptr = &var;    // ptr 存储 var 的地址

&取地址运算符,*声明指针/解引用。

2. 声明与初始化

复制代码
复制代码
复制代码
int* p1;           // 指向 int 的指针
double* p2;        // 指向 double 的指针
int* p3 = nullptr; // 空指针(C++11)

3. 指针操作

复制代码
复制代码
复制代码
int value = 5;
int* ptr = &value;

cout << ptr;      // 输出地址(如 0x7ffdf2c3)
cout << *ptr;     // 输出值:5(解引用)

*ptr = 10;        // 通过指针修改值
cout << value;    // 输出:10

4. 指针算术

仅对数组有效:

复制代码
复制代码
复制代码
int arr[3] = {10, 20, 30};
int* p = arr;      // 指向 arr[0]

cout << *p;        // 10
p++;               // 移动至下一个元素
cout << *p;        // 20

5. 动态内存

复制代码
复制代码
复制代码
int* p = new int;   // 动态分配
*p = 42;
delete p;           // 必须释放内存
p = nullptr;        // 避免悬垂指针

// 动态数组
int* arr = new int[5];
delete[] arr;

6. 指针与常量

复制代码
复制代码
复制代码
const int* p1;        // 指向常量(值不可改)
int* const p2;        // 常量指针(指向不可改)
const int* const p3;  // 指向常量的常量指针

7. 智能指针(现代 C++)

复制代码
复制代码
复制代码
#include <memory>

std::unique_ptr<int> p1(new int(5));  // 独占所有权
auto p2 = std::make_unique<int>(10);  // C++14 推荐

std::shared_ptr<int> p3 = std::make_shared<int>(20);  // 共享所有权

8. 常见错误

  • 悬垂指针:指向已释放内存

  • 内存泄漏 :未释放 new分配的内存

  • 空指针解引用

  • 数组越界访问

最佳实践

  1. 优先使用智能指针而非裸指针

  2. 及时将指针置为 nullptr

  3. 明确指针所有权(谁负责释放)

  4. 对数组使用标准容器(vector、array)


指针是 C++ 底层编程的核心,正确使用可提升效率,错误使用会导致严重问题。现代 C++ 建议通过智能指针和容器自动管理内存。

相关推荐
C^h7 小时前
c++ string
开发语言·c++
raindayinrain7 小时前
c++高性能--原子操作,无锁编程,操作顺序
开发语言·c++·性能优化
学逆向的7 小时前
C++ 合并命名空间
开发语言·c++·网络安全
Zhao-Jichao7 小时前
VS2026 打包 C++ 程序生成 EXE,借助 Installer Project 扩展工具
开发语言·c++
小徐不徐说9 小时前
C++ 接口与插件设计:从工厂注册到 Qt 动态插件
数据库·c++·qt·系统架构·程序设计
大都督会赢的9 小时前
C++第一节课
开发语言·c++
UIU1149 小时前
P1233 [ICPC 2001 Taejon R] 木棍加工
数据结构·c++·算法·动态规划
TMedical10 小时前
MedPlanning 截骨模拟矫形功能
c++·图像处理·人工智能·qt·健康医疗
qq_4069810310 小时前
共享变量一 关于extern与const
开发语言·c++
chari克里12 小时前
QT5.15.2 + msvc2022部署全流程说明(windows可联网环境)
开发语言·c++·qt