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. 对数组使用标准容器(vectorarray


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

相关推荐
Chester_19997 小时前
CSP202203C.计算资源调度器
开发语言·数据结构·c++·蓝桥杯
会周易的程序员9 小时前
给 PLC 写一个字节码虚拟机:STVM 虚拟机架构设计
开发语言·c++·虚拟机·软plc·iec61131·stvm
小灰灰搞电子9 小时前
完全驾驭 Qt 与数据库:C++ ORM 框架 QxOrm 原理与实践指南
数据库·c++·qt
QT界面美化性能优化9 小时前
QT+AI:使用AI技术为QT应用程序赋能
c++·人工智能·qt·opencv·qt教程·qt6.3
学习星球11 小时前
单调栈——从“找下一个更大的“到柱状图中的最大矩形
数据库·c++·算法·leetcode·xcode
小灰灰搞电子12 小时前
C++ 引用折叠详解
c++
布莱克60513 小时前
数组详解:定义、作用、应用场景及与链表的区别(C/C++ 代码讲解)
c语言·开发语言·c++·数组
牛油果子哥q14 小时前
C++内存池与对象池精讲:内存碎片、自定义分配器、对象池实现、STL allocator原理、工程落地与性能对比
java·开发语言·c++
万法若空14 小时前
C/C++ 类型别名定义方式对比
java·c语言·c++
小小晓.15 小时前
C++ 值类别与完美转发深度剖析:从左值右值到 std::forward 源码解密
开发语言·c++·算法