基于算法竞赛的c++编程(25)指针简单介绍和简单应用
指针的基本概念
指针是一种变量,用于存储另一个变量的内存地址。通过指针可以直接访问或修改内存中的数据,提供灵活的内存管理手段。在C++中,指针的类型必须与其指向的数据类型一致。
int var = 10; // 定义一个整型变量
int *ptr = &var; // 定义一个指针,指向var的地址
指针的声明与初始化
声明指针时需在变量名前添加*
,初始化时使用&
获取变量的地址。未初始化的指针称为野指针,可能引发程序崩溃。
double value = 3.14;
double *dPtr = &value; // 正确初始化
int *uninitPtr; // 未初始化,危险!
指针的解引用
通过*
操作符访问指针指向的内存数据。解引用时需确保指针已指向有效内存。
cout << *ptr; // 输出10(var的值)
*dPtr = 9.99; // 修改value的值为9.99
指针的简单应用:动态内存分配
使用new
和delete
操作符动态分配和释放内存,适用于运行时确定大小的场景。
int *arr = new int[5]; // 动态分配5个整型空间
arr[0] = 1; // 操作动态数组
delete[] arr; // 释放内存
指针与数组的关系
数组名可视为指向首元素的指针。指针算术可用于遍历数组。
int nums[3] = {1, 2, 3};
int *p = nums; // p指向nums[0]
cout << *(p + 1); // 输出nums[1]的值2
指针作为函数参数
通过指针传递参数可实现函数内修改外部变量(按引用传递的效果)。
void increment(int *p) {(*p)++;
}int main() {int x = 5;increment(&x); // x变为6
}
注意事项
- 避免空指针解引用(使用前检查是否为
nullptr
)。 - 动态内存分配后必须释放,防止内存泄漏。
- 指针类型需严格匹配,否则可能导致未定义行为。