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

相关推荐
夜猫子ing1 小时前
《嵌入式 Linux 控制服务从零搭建(二):从目录结构到 CMakeLists,搭一个像样的 C++ 工程骨架》
java·前端·c++
tankeven2 小时前
C++ 数组
c++
宏笋2 小时前
C++ 完美转发和应用场景
c++
进击的荆棘2 小时前
递归、搜索与回溯——综合(上)
c++·算法·leetcode·深度优先·dfs
水云桐程序员9 小时前
C++可以写手机应用吗
开发语言·c++·智能手机
小黄人软件13 小时前
C++读写编辑CSV文件示例源码 用于数据导入导出,比Excel好使
开发语言·c++·excel
郭涤生13 小时前
C++各个版本的性能和安全性总结
开发语言·c++
wljy115 小时前
二、静态库的制作和使用
linux·c语言·开发语言·c++
道剑剑非道15 小时前
FFmpeg 6.0 实战:用 C++ 封装摄像头采集与 RTSP 推流
开发语言·c++·ffmpeg