教程 cpp tutorial

指针变量

指针是 C++ 中一种非常强大的功能,它允许程序直接操作内存。通过指针,程序可以动态分配内存、访问和修改其他变量的值,以及实现更高效的内存管理。在 C++ 中,指针用于引用内存中的地址,指向变量或对象的位置。

指针的声明与初始化

指针变量是用来存储其他变量的内存地址的。声明指针时,必须使用 * 来表示它是一个指针类型。

示例:指针的声明与初始化

cpp
#include <iostream>
using namespace std;

int main() {
    int num = 10;
    int* ptr = &num;  // 声明一个指针并初始化为 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; // 获取 num 的地址

解引用指针

解引用操作符 * 用于访问指针指向的值。

cpp
int num = 5;
int* ptr = &num;
cout << *ptr;  // 输出 num 的值,即 5

修改指针指向的值

通过解引用指针,你可以修改它指向的变量的值。

cpp
int num = 5;
int* ptr = &num;

*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。
  • 指针在数组、函数参数传递和动态内存管理中有广泛应用。

通过掌握指针的使用,你可以实现更高效的内存管理和更灵活的程序设计。