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