C++ 指针精通:核心概念、代码示例与实战应用
什么是指针?
C++ 指针是存储另一变量内存地址的变量。指针的类型必须与其指向的数据类型匹配。例如 int* 只能存放 int 对象的地址。
指针让程序直接操作内存中的数据,支撑高效数据结构、动态分配和按引用调用语义。
理解内存地址
每个变量在内存中占据唯一位置。取地址运算符 & 获取该地址。对变量 x,&x 即其内存位置。
指针声明语法
声明遵循模式:
datatype *pointer_name;
- datatype – 指针所指数据的基础类型。
- pointer_name – 指针变量的标识符。
- 星号表示该变量为指针。
示例:
int *p; // 指向 int 的指针 double *d; // 指向 double 的指针 char *c; // 指向 char 的指针
取地址(&)与解引用(*)
& 运算符给出变量地址;* 运算符取出该地址存储的值。
#include <iostream> using namespace std; int main() { int x = 27; int *ip = &x; cout << "Value of x: " << x << endl; cout << "Address of x: " << ip << endl; cout << "Value via pointer: " << *ip << endl; return 0; }
输出:
Value of x: 27 Address of x: 0x7ffeefbff5ac Value via pointer: 27
指针与数组
数组名退化为指向首元素的指针。因此:
int arr[5]; int *p = arr; // 正确 int *q = &arr; // 错误 – &arr 得到整个数组的地址而非首元素
用指针遍历数组:
#include <iostream> using namespace std; int main() { int *p; int arr[] = {10, 34, 13, 76, 5, 46}; p = arr; for (int i = 0; i < 6; ++i) { cout << *p++ << endl; } return 0; }
输出:
10 34 13 76 5 46
空指针
指针无有效目标时,应初始化为 NULL(C++11 起推荐 nullptr),防止误解引用。
#include <iostream> using namespace std; int main() { int *ip = nullptr; cout << "ip = " << ip << endl; // 打印 0 return 0; }
函数中使用指针
向函数传递指针允许函数修改原变量,实现按引用调用。
#include <iostream> using namespace std; void modify(int *p1, int *p2) { *p1 = 10; *p2 = 11; } int main() { int a = 5, b = 5; cout << "Before: a=" << a << ", b=" << b << endl; modify(&a, &b); cout << "After: a=" << a << ", b=" << b << endl; return 0; }
输出:
Before: a=5, b=5 After: a=10, b=11
指针的优势
- 直接内存访问,编写高性能代码。
- 单次函数调用修改多个变量。
- 动态内存分配与释放(如
new/delete)。 - 构建链表、树、图等复杂数据结构的基础。
- 促进面向对象设计中的高效资源共享与多态。
快速总结
- 指针存储另一变量的地址。
- 用
&取地址,用*解引用。 - 数组名退化为指向首元素的指针。
- 闲置指针初始化为
nullptr。 - 向函数传指针实现原地修改。
- 指针支撑动态内存管理与高效数据结构。
C语言
- C++ 数组完全指南:声明、初始化、多维数组与指针技巧
- C++ do-while 循环详解:语法、实战示例与嵌套循环
- C++ 指针精通:核心概念、代码示例与实战应用
- C++ char 类型完全指南:声明、ASCII 码、输入输出与字符串转换
- C++ 运算符重载实战指南:语法、方法、限制与代码示例
- C++ 结构体详解:定义、初始化、指针、函数参数与局限性
- 掌握 C++ std::list:语法、函数与实战示例
- C++ 函数详解:从声明到调用的实战指南
- C# 集合实战教程:ArrayList、Stack、Queue、Hashtable 等核心类型全解析
- C 语言指针完全指南:类型、用法与最佳实践
- C 语言指针实战:从入门到高级编程
- C++变量类型详解:内存布局、取值范围与操作集