主题
指针变量
指针是 C++ 中一种非常强大的功能,它允许程序直接操作内存。通过指针,程序可以动态分配内存、访问和修改其他变量的值,以及实现更高效的内存管理。在 C++ 中,指针用于引用内存中的地址,指向变量或对象的位置。
指针的声明与初始化
指针变量是用来存储其他变量的内存地址的。声明指针时,必须使用 *
来表示它是一个指针类型。
示例:指针的声明与初始化
cpp
#include <iostream>
using namespace std;
int main() {
int num = 10;
int* ptr = # // 声明一个指针并初始化为 num 的地址
cout << "num 的值: " << num << endl;
cout << "ptr 指向的地址: " << ptr << endl;
cout << "ptr 指向的值: " << *ptr << endl;
return 0;
}
输出:
num 的值: 10
ptr 指向的地址: 0x7ffeefbff59c
ptr 指向的值: 10
在上述代码中:
int* ptr
声明了一个指向整数类型的指针变量。ptr = &num
将指针ptr
初始化为变量num
的地址。*ptr
解引用指针,获取它指向地址中的值。
指针的基本操作
获取变量的地址
使用取地址运算符 &
获取变量的地址。
cpp
int num = 5;
int* ptr = # // 获取 num 的地址
解引用指针
解引用操作符 *
用于访问指针指向的值。
cpp
int num = 5;
int* ptr = #
cout << *ptr; // 输出 num 的值,即 5
修改指针指向的值
通过解引用指针,你可以修改它指向的变量的值。
cpp
int num = 5;
int* ptr = #
*ptr = 10; // 修改 num 的值
cout << "num 的新值: " << num << endl; // 输出: num 的新值: 10
空指针与野指针
空指针
空指针是指指向空地址的指针,通常用 nullptr
初始化。
cpp
int* ptr = nullptr; // 空指针
使用空指针可以防止指针未初始化而访问无效的内存地址。
野指针
野指针是指指向已经释放的内存地址的指针。使用野指针会导致程序崩溃或产生未定义行为。使用后必须确保将其指向 nullptr
或有效地址。
cpp
int* ptr = new int(5);
delete ptr; // 释放内存
ptr = nullptr; // 防止野指针
指针与数组
在 C++ 中,数组的名字本质上是指向数组首元素的指针。可以通过指针访问数组中的元素。
示例:指针与数组的关系
cpp
#include <iostream>
using namespace std;
int main() {
int arr[] = {10, 20, 30, 40, 50};
int* ptr = arr; // 数组名即为数组的首地址
cout << "通过指针访问数组元素: " << endl;
for (int i = 0; i < 5; i++) {
cout << *(ptr + i) << " "; // 使用指针访问元素
}
cout << endl;
return 0;
}
输出:
通过指针访问数组元素:
10 20 30 40 50
通过 ptr + i
可以访问数组中的每个元素。
指针与函数
通过指针传递参数
通过指针传递参数时,函数接收到的是变量的地址,因此可以在函数内部修改原始数据。
cpp
#include <iostream>
using namespace std;
void modifyValue(int* ptr) {
*ptr = 20; // 修改指针指向的值
}
int main() {
int num = 10;
cout << "修改前: " << num << endl;
modifyValue(&num); // 传递变量地址给函数
cout << "修改后: " << num << endl;
return 0;
}
输出:
修改前: 10
修改后: 20
动态内存分配
C++ 中提供了 new
和 delete
操作符用于动态内存分配和释放内存。
示例:使用 new
和 delete
cpp
#include <iostream>
using namespace std;
int main() {
int* ptr = new int; // 使用 new 操作符分配内存
*ptr = 50;
cout << "动态分配的值: " << *ptr << endl;
delete ptr; // 使用 delete 释放内存
return 0;
}
输出:
动态分配的值: 50
小结
- 指针是 C++ 中非常强大的功能,允许直接操作内存。
*
运算符用于解引用指针,&
运算符用于获取变量的地址。- 空指针(
nullptr
)和野指针是需要特别注意的概念,空指针避免无效访问,野指针需要及时置为nullptr
。 - 指针在数组、函数参数传递和动态内存管理中有广泛应用。
通过掌握指针的使用,你可以实现更高效的内存管理和更灵活的程序设计。