C++ 指针与内存管理
什么是指针
指针是C++中一种特殊类型的变量,它存储的是内存地址而非实际值。通过指针,我们可以间接访问和操作存储在特定内存位置的数据。指针允许程序员直接操作内存,这带来了极大的灵活性和性能优势,但同时也增加了编程复杂性和潜在的错误风险。
指针的基本语法
// 声明指针
数据类型 *指针名;
// 示例
int *ptr; // 声明一个指向整数的指针
char *cptr; // 声明一个指向字符的指针
double *dptr; // 声明一个指向双精度浮点数的指针
指针的基本操作
1. 获取变量的地址
使用 &
运算符可以获取变量的内存地址:
int num = 10;
int *ptr = # // ptr现在存储了num变量的内存地址
2. 通过指针访问值
使用 *
运算符可以访问指针所指向的内存位置中的值,这个操作被称为"解引用":
int num = 10;
int *ptr = #
cout << *ptr; // 输出10,即num的值
*ptr = 20; // 修改指针所指向内存位置的值
cout << num; // 输出20,num的值已经被修改
完整示例
#include <iostream>
using namespace std;
int main() {
int num = 10;
int *ptr = #
cout << "num 的值: " << num << endl;
cout << "num 的地址: " << &num << endl;
cout << "ptr 存储的地址: " << ptr << endl;
cout << "通过ptr访问的值: " << *ptr << endl;
*ptr = 20; // 通过指针修改值
cout << "修改后,num 的值: " << num << endl;
return 0;
}
输出:
num 的值: 10
num 的地址: 0x7ffd5fbff8ac
ptr 存储的地址: 0x7ffd5fbff8ac
通过ptr访问的值: 10
修改后,num 的值: 20
指针与数组
在C++中,数组名实际上就是指向数组第一个 元素的指针。这种关系使得指针和数组之间有着紧密的联系。
#include <iostream>
using namespace std;
int main() {
int arr[5] = {10, 20, 30, 40, 50};
int *ptr = arr; // ptr指向数组的第一个元素
cout << "通过数组名访问元素: " << arr[2] << endl;
cout << "通过指针访问元素: " << *(ptr+2) << endl;
return 0;
}
输出:
通过数组名访问元素: 30
通过指针访问元素: 30
备注
指针算术运算与数据类型有关。例如,ptr+1
表示移动到下一个元素,实际内存偏移量等于该类型的大小(例如int为4字节)。