033. 使用指针进行数组操作

在C语言中,指针是处理数组操作的强大工具。通过指针,可以高效地访问和修改数组元素,实现各种复杂的数组操作。以下将通过具体示例展示如何使用指针进行数组操作。

1. 访问数组元素

数组名本身就是一个指向数组首元素的指针。可以通过指针加偏移量的方式访问数组中的任意元素。

示例1:使用指针访问数组元素

#include <stdio.h>

int main() {
    int arr[] = {1, 2, 3, 4, 5};
    int *ptr = arr; // 指针初始化为数组的首地址

    // 使用指针访问数组元素
    printf("Element at index 0: %d\n", *ptr); // 输出数组的第一个元素
    printf("Element at index 1: %d\n", *(ptr + 1)); // 输出数组的第二个元素
    printf("Element at index 2: %d\n", *(ptr + 2)); // 输出数组的第三个元素

    return 0;
}

输出结果

Element at index 0: 1
Element at index 1: 2
Element at index 2: 3

2. 遍历数组

使用指针可以高效地遍历数组。通过指针加1的方式,可以逐个访问数组中的每个元素。

示例2:使用指针遍历数组

#include <stdio.h>

int main() {
    int arr[] = {1, 2, 3, 4, 5};
    int *ptr = arr; // 指针初始化为数组的首地址
    int size = sizeof(arr) / sizeof(arr[0]); // 计算数组的大小

    // 使用指针遍历数组
    for (int i = 0; i < size; i++) {
        printf("Element at index %d: %d\n", i, *(ptr + i));
    }

    return 0;
}

输出结果

Element at index 0: 1
Element at index 1: 2
Element at index 2: 3
Element at index 3: 4
Element at index 4: 5

3. 修改数组元素

通过指针可以修改数组中的元素。通过指针加偏移量的方式,可以访问并修改数组中的任意元素。

示例3:使用指针修改数组元素

#include <stdio.h>

int main() {
    int arr[] = {1, 2, 3, 4, 5};
    int *ptr = arr; // 指针初始化为数组的首地址
    int size = sizeof(arr) / sizeof(arr[0]); // 计算数组的大小

    // 使用指针修改数组元素
    for (int i = 0; i < size; i++) {
        *(ptr + i) += 10; // 将每个元素加10
    }

    // 打印修改后的数组
    for (int i = 0; i < size; i++) {
        printf("Element at index %d: %d\n", i, *(ptr + i));
    }

    return 0;
}

输出结果

Element at index 0: 11
Element at index 1: 12
Element at index 2: 13
Element at index 3: 14
Element at index 4: 15

4. 数组指针与指针数组

数组指针和指针数组是两个不同的概念,但它们在某些情况下可以互换使用。

示例4:数组指针

数组指针是一个指针,指向一个数组的首元素。

#include <stdio.h>

int main() {
    int arr[] = {1, 2, 3, 4, 5};
    int *ptr = arr; // 指针初始化为数组的首地址

    // 使用数组指针访问数组元素
    printf("Element at index 0: %d\n", *ptr);
    printf("Element at index 1: %d\n", *(ptr + 1));
    printf("Element at index 2: %d\n", *(ptr + 2));

    return 0;
}

示例5:指针数组

指针数组是一个数组,其中的每个元素都是一个指针。

#include <stdio.h>

int main() {
    int a = 10, b = 20, c = 30;
    int *ptrArray[3]; // 声明一个指针数组,包含3个指针

    ptrArray[0] = &a; // 将第一个指针初始化为a的地址
    ptrArray[1] = &b; // 将第二个指针初始化为b的地址
    ptrArray[2] = &c; // 将第三个指针初始化为c的地址

    // 使用指针数组访问变量
    printf("Value of a: %d\n", *ptrArray[0]);
    printf("Value of b: %d\n", *ptrArray[1]);
    printf("Value of c: %d\n", *ptrArray[2]);

    return 0;
}

输出结果

Value of a: 10
Value of b: 20
Value of c: 30

5. 多维数组与指针

多维数组可以通过指针来访问和修改。对于二维数组,可以使用指针的指针来处理。

示例6:使用指针操作二维数组

#include <stdio.h>

int main() {
    int matrix[3][4] = {
        {1, 2, 3, 4},
        {5, 6, 7, 8},
        {9, 10, 11, 12}
    };
    int rows = 3, cols = 4;
    int (*ptr)[4] = matrix; // 指针初始化为二维数组的首地址

    // 使用指针访问二维数组
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            printf("Element at [%d][%d]: %d\n", i, j, *(*(ptr + i) + j));
        }
    }

    return 0;
}

输出结果

Element at [0][0]: 1
Element at [0][1]: 2
Element at [0][2]: 3
Element at [0][3]: 4
Element at [1][0]: 5
Element at [1][1]: 6
Element at [1][2]: 7
Element at [1][3]: 8
Element at [2][0]: 9
Element at [2][1]: 10
Element at [2][2]: 11
Element at [2][3]: 12

通过上述示例,你可以看到如何在C语言中使用指针进行数组操作:

  1. 访问数组元素:通过指针加偏移量的方式访问数组中的任意元素。
  2. 遍历数组:使用指针逐个访问数组中的每个元素。
  3. 修改数组元素:通过指针加偏移量的方式访问并修改数组中的任意元素。
  4. 数组指针与指针数组:数组指针是一个指针,指向数组的首元素;指针数组是一个数组,其中的每个元素都是一个指针。
  5. 多维数组与指针:多维数组可以通过指针的指针来处理。

视频讲解

BiliBili: 视睿网络-哔哩哔哩视频 (bilibili.com)