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++ 建议通过智能指针和容器自动管理内存。

相关推荐
暖焰核心21 分钟前
C++内存管理和模板初阶
开发语言·c++
Irissgwe35 分钟前
c++智能指针
开发语言·c++
西梅汁39 分钟前
C++ 线程间通信(一)
c++
hautcyh1 小时前
C++new和delete
c++
不会C语言的男孩1 小时前
C++ Primer Plus 第10章:对象和类
开发语言·c++
不会C语言的男孩1 小时前
C++ Primer Plus 第11章:使用类
开发语言·c++
comedate2 小时前
FMT_UNICODE 与 CUDA 编码配置专栏技术文档
c++·utf-8·nvcc
玖玥拾2 小时前
C/C++ 基础笔记(二)
c语言·c++
故事和你913 小时前
洛谷-【动态规划2】线性状态动态规划4
开发语言·数据结构·c++·算法·动态规划·图论
不吃土豆的马铃薯3 小时前
Socket 网络编程实战教程
linux·服务器·开发语言·网络·c++·算法