教程 cpp tutorial

指针与数组

在 C++ 中,数组和指针有着密切的关系。数组的名字其实就是数组首元素的指针。因此,指针可以用来访问和操作数组的元素。理解指针与数组的关系,对于编写高效的 C++ 代码至关重要。

数组名是指针

在 C++ 中,数组名代表了指向数组第一个元素的指针。举个例子:

cpp
#include <iostream>
using namespace std;

int main() {
    int arr[] = {10, 20, 30, 40, 50};
    int* ptr = arr;  // 数组名 arr 是指向数组首元素的指针

    cout << "数组的第一个元素是: " << *ptr << endl;  // 通过指针访问数组第一个元素

    return 0;
}

`

输出:

代码
数组的第一个元素是: 10

这里,arr 实际上是指向数组第一个元素 arr[0] 的指针,因此 *ptr 就是 arr[0]。

使用指针遍历数组

可以通过指针遍历整个数组。指针在数组中自动递增,指向数组的下一个元素。

示例:通过指针遍历数组

cpp
#include <iostream>
using namespace std;

int main() {
    int arr[] = {10, 20, 30, 40, 50};
    int* ptr = arr;  // 指向数组首元素

    cout << "通过指针遍历数组元素: ";
    for (int i = 0; i < 5; i++) {
        cout << *(ptr + i) << " ";  // 使用指针偏移访问元素
    }
    cout << endl;

    return 0;
}

输出:

代码
通过指针遍历数组元素: 10 20 30 40 50

在上述代码中,通过 *(ptr + i) 可以访问数组中的每个元素,ptr 是指向数组首元素的指针。

指针与数组的差异

尽管数组名本质上是指向数组第一个元素的指针,但它们之间有一些细微的差别:

  1. 数组名不可更改:数组名是一个常量指针,指向固定的内存地址,无法修改。例如,arr++ 是无效的。

  2. 指针可变:指针可以修改,指向数组中的任意元素。例如,ptr++ 可以使指针指向数组中的下一个元素。

  3. 数组与指针的存储方式不同:数组的元素在栈上连续存储,而指针是一个变量,存储在栈或堆中,取决于其声明的位置。

二维数组与指针

在 C++ 中,二维数组也是数组的数组,可以通过指针访问。二维数组的指针实际上是指向数组的数组元素。

示例:使用指针访问二维数组

cpp
#include <iostream>
using namespace std;

int main() {
    int arr[2][3] = {{1, 2, 3}, {4, 5, 6}};
    int* ptr = (int*)arr;  // 将二维数组转换为指向 int 的指针

    cout << "二维数组的元素: ";
    for (int i = 0; i < 6; i++) {
        cout << *(ptr + i) << " ";  // 通过指针遍历二维数组元素
    }
    cout << endl;

    return 0;
}

输出:

代码
二维数组的元素: 1 2 3 4 5 6

通过将二维数组转换为 int* 类型指针,我们能够像一维数组一样通过指针来遍历二维数组的元素。

使用指针传递数组

在 C++ 中,当数组作为函数参数传递时,传递的是数组的指针。这意味着函数内部可以直接操作数组的元素。

示例:通过指针传递数组

cpp
#include <iostream>
using namespace std;

void printArray(int* arr, int size) {
    for (int i = 0; i < size; i++) {
        cout << arr[i] << " ";
    }
    cout << endl;
}

int main() {
    int arr[] = {10, 20, 30, 40, 50};
    printArray(arr, 5);  // 传递数组名(即数组的指针)

    return 0;
}

输出:

代码
10 20 30 40 50

在函数 printArray 中,参数 arr 是一个指向整数的指针,它指向数组的首元素。因此,我们可以像操作普通数组一样通过指针访问数组。

小结

  • 数组名实际上是指向数组首元素的指针。
  • 可以通过指针遍历数组并访问其元素。
  • 数组名不可修改,而指针可以自由改变指向。
  • 使用指针可以方便地传递数组并修改数组内容。

理解指针和数组的关系能帮助你更高效地处理内存,并在需要时利用指针对数组进行灵活的操作。