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

相关推荐
半杯咖啡半行码1 小时前
C++ 编程与 STL 模板:从泛型编程到内存安全详解
开发语言·c++
xh didida2 小时前
Linux -- 基础IO
linux·服务器·开发语言·c++
垆边人似月.3 小时前
华为机试题 :两数之和
c++·算法·华为
个 人 练 习 生3 小时前
C++ string 类模拟实现:从底层理解字符串(上)
开发语言·c++·经验分享·学习·程序人生
垆边人似月.3 小时前
华为机试题 :有效的括号
c++·算法·华为
坤坤子吖3 小时前
C++智能指针:RAII、shared_ptr与内存泄漏
开发语言·c++·笔记·学习
神仙别闹3 小时前
基于C++实现的贪吃蛇游戏平台
java·c++·游戏
王老师青少年编程4 小时前
2026年6月GESP真题及题解(C++三级): 选择题和判断题(题解)
c++·真题·gesp·答案·csp·三级·信奥赛
C++ 老炮儿的技术栈4 小时前
static的作用
c语言·c++·人工智能·单片机·c
程序员老陆5 小时前
C++ 未定义行为全景:对象模型、优化边界与工程防御
开发语言·c++·程序设计