📜  cpp 详细信息中的指针 - C++ (1)

📅  最后修改于: 2023-12-03 15:00:03.173000             🧑  作者: Mango

C++ 详细信息中的指针

在 C++ 中,指针是一种很强大的数据类型,它指向其他数据类型的地址。使用指针,可以更加灵活地操作内存空间,构建更高效的代码。

声明和初始化指针

声明一个指针需要指定它所指向的数据类型,可以使用 * 符号来定义指针。例如:

int *int_ptr;  // 声明一个指向 int 类型的指针
double *double_ptr;  // 声明一个指向 double 类型的指针

初始化指针可以使用以下两种方式:

  1. 将指针初始化为 nullptr,表示它不指向任何数据:

    int *int_ptr = nullptr;
    
  2. 将指针初始化为某个数据的地址:

    int x = 10;
    int *int_ptr = &x;
    
指针的解引用

使用 * 符号可以对指针进行解引用,即获取指针所指向的数据。例如:

int x = 10;
int *int_ptr = &x;  // 指向 x 的地址
cout << *int_ptr << endl;  // 输出 10
指针运算

指针可以进行加法、减法、自增、自减等运算。这些运算的结果都是指向内存中更靠近或者更远离当前地址的地址。

int arr[] = {1, 2, 3, 4, 5};
int *int_ptr = arr;  // 指向数组开头的地址
cout << *int_ptr << endl;  // 输出 1
int_ptr++;  // 指向数组第二个元素的地址
cout << *int_ptr << endl;  // 输出 2
指针和数组

在 C++ 中,数组名就是一个指向数组首元素地址的指针。因此,指针可以和数组进行很多常见的操作,例如遍历、赋值、传递参数等。

int arr[] = {1, 2, 3, 4, 5};
int *int_ptr = arr;
for (int i = 0; i < 5; i++) {
    cout << *(int_ptr + i) << endl;  // 依次输出数组中的每个元素
}
指针和函数

指针还可以用于函数参数的传递。通过将指针作为参数传递,可以在函数内部修改外部变量的值。

void swap(int *x, int *y) {
    int temp = *x;
    *x = *y;
    *y = temp;
}

int main() {
    int a = 10;
    int b = 20;
    swap(&a, &b); // 将 a 和 b 的地址传递给 swap 函数
    cout << a << " " << b << endl;  // 输出 20 10
    return 0;
}
指针和动态内存分配

指针常常与动态内存分配一起使用。使用 new 关键字可以在堆内存中分配一段空间,并返回该空间的首地址。使用 delete 关键字可以释放该空间。

int *int_ptr = new int(10);  // 在堆内存中分配一个 int 类型空间,并将值赋为 10
cout << *int_ptr << endl;  // 输出 10
delete int_ptr;  // 释放空间

指针还可以指向动态分配的数组。在这种情况下,使用 delete[] 来释放空间。

int *int_arr = new int[5];  // 在堆内存中分配一个长度为 5 的 int 数组
int_arr[0] = 10;
int_arr[1] = 20;
cout << *(int_arr + 1) << endl;  // 输出 20
delete[] int_arr;  // 释放空间
总结

指针是 C++ 中非常重要的数据类型,它可以指向其他数据类型的地址,可以解引用、进行运算、和数组、函数、动态内存分配等进行操作。在使用指针时,需要小心指针空悬、野指针、内存泄漏等问题。