C++指针详细介绍

发布时间:2026/5/18 13:12:38

C++指针详细介绍 下面给你一个系统、由浅入深的 C 指针讲解适合入门到进阶。我会尽量少堆术语多用例子。一、什么是指针指针 保存内存地址的变量int a 10; int* p a; // p 指向 aa普通变量存值a取a的内存地址p指针存的是地址*p解引用访问该地址里的值一句话指针告诉你“数据在哪里”而不是“数据是什么”。二、基本语法操作含义int* p;定义一个 int 类型指针a取变量 a 的地址*p访问指针指向的内容p a让 p 指向 a示例int x 5; int* p x; cout x endl; // 5 cout *p endl; // 5 *p 20; cout x endl; // 20三、指针的大小cout sizeof(int*) endl; cout sizeof(char*) endl;32 位系统通常4 字节64 位系统通常8 字节✅所有指针大小相同只是“指向的数据类型不同”四、指针类型为什么重要int* p; char* q;指针类型决定✅ 一次解引用读多少字节✅ 指针 1 跳多远int a[5]; int* p a; p; // 向后移动 4 字节sizeof(int)五、指针 vs 数组1️⃣ 数组名 ≈ 指针常量int arr[3] {1,2,3}; cout arr[0] endl; cout *(arr 1) endl; // 2⚠️ 区别数组指针内存连续只存地址不能重新赋值可以改指向六、指针运算int a[] {10, 20, 30}; int* p a; p; // 指向下一个元素 p 2; // 跳过两个元素❌ 错误示例int* p nullptr; p; // 未定义行为七、空指针非常重要int* p nullptr; // ✅ 推荐❌ 旧写法不推荐int* p NULL;✅ 使用前检查if (p ! nullptr) { cout *p endl; }八、野指针常见 Bugint* p; // 未初始化 ❌ *p 10; // 危险✅ 正确做法int* p nullptr;九、const 与指针经典难点1️⃣ 指针指向常量const int* p; 不能通过p修改值2️⃣ 指针本身是常量int* const p x; 不能改变指向3️⃣ 两者都 constconst int* const p x;口诀const 在 * 左边 → 数据不能改​const 在 * 右边 → 指针不能改十、指针与函数1️⃣ 传指针修改外部变量void change(int* p) { *p 100; } int main() { int x 5; change(x); }2️⃣ 指针作为返回值⚠️ 危险int* f() { int x 10; return x; // ❌ 返回局部变量地址 }✅ 正确方式返回动态内存或传入参数指针十一、new / delete动态内存int* p new int(10); delete p; p nullptr;数组int* arr new int[5]; delete[] arr;⚠️ 忘记delete→内存泄漏十二、智能指针现代 C 推荐 ✅#include memory unique_ptrint p make_uniqueint(10); shared_ptrint q make_sharedint(20);✅ 自动释放✅ 不用delete十三、常见面试 / 易错点问题答案指针和引用的区别引用必须初始化不能为 null指针可以为空吗可以数组名是指针吗不是但可退化为指针sizeof(p)是多少指针大小十四、学习建议✅ 先搞懂地址 → 指针 → 解引用​✅ 少用裸指针多用vector/smart pointer✅ 画图理解内存强烈推荐

相关新闻