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; }