多维数组在C语言中是一个常用的数据结构,掌握它的使用对于编写高效的程序非常重要。在使用多维数组时,需要注意内存分配和释放,避免内存泄漏。C99标准引入了变量长度数组(VLA),可以方便地定义动态数组。对于大型数组,考虑使用三维或更高维的数组。可以利用指针的运算来实现灵活的数组访问。

1、固定大小的多维数组

对于固定大小的多维数组,当数组的大小在编译时已知时,可以直接声明和使用。

#include <stdio.h>

int main() {
    // 定义一个 3 行 4 列的二维数组
    int arr[3][4];  

    // 访问和修改元素
    arr[0][0] = 1;  // 第一行第一列赋值为 1
    arr[2][3] = 10; // 第三行第四列赋值为 10

    // 打印二维数组的所有元素
    printf("二维数组的元素如下:\n");
    for (int i = 0; i < 3; i++) {  // 遍历每一行
        for (int j = 0; j < 4; j++) {  // 遍历每一列
            printf("%d ", arr[i][j]);  // 打印数组元素
        }
        printf("\n");
    }

    return 0;
}

2、动态分配的二维数组

如需要动态分配二维数组的内存,可以使用 malloc 来分配内存,并通过指针来访问这些数组。对于动态数组,通常需要分配内存并使用双重指针进行访问。对于动态分配的数组,确保按正确的顺序释放内存:先释放每行,再释放整个数组。

#include <stdio.h>
#include <stdlib.h>

int main() {
    int rows = 3;
    int cols = 4;
    
    // 分配内存
    int **arr = (int **)malloc(rows * sizeof(int *));  // 分配行指针
    for (int i = 0; i < rows; i++) {
        arr[i] = (int *)malloc(cols * sizeof(int));  // 分配每行的列
    }

    // 访问数组并初始化
    arr[0][0] = 1;
    arr[2][3] = 10;

    // 打印数组中的元素
    printf("arr[0][0] = %d\n", arr[0][0]);
    printf("arr[2][3] = %d\n", arr[2][3]);

    // 释放内存
    for (int i = 0; i < rows; i++) {
        free(arr[i]);  // 释放每行的内存
    }
    free(arr);  // 释放行指针

    return 0;
}

3、一维数组模拟二维数组

还可以通过一维数组来模拟二维数组的行为。这种方法在 C 语言中非常常见,特别是在不想使用双重指针时。

#include <stdio.h>
#include <stdlib.h>

int main() {
    int rows = 3;
    int cols = 4;

    // 为一维数组分配内存
    int *arr = (int *)malloc(rows * cols * sizeof(int));

    // 访问数组元素
    arr[0 * cols + 0] = 1;  // 访问第 1 行第 1 列
    arr[2 * cols + 3] = 10;  // 访问第 3 行第 4 列

    // 打印数组中的元素
    printf("arr[0][0] = %d\n", arr[0 * cols + 0]);
    printf("arr[2][3] = %d\n", arr[2 * cols + 3]);

    // 释放内存
    free(arr);

    return 0;
}

推荐文档

相关文档

大家感兴趣的内容

随机列表