1、使用指向二维数组的指针
C 语言中,二维数组是按行优先顺序存储的,也就是一个行的所有元素在内存中是连续存储的。可以将二维数组视为指向数组的指针。
#include <stdio.h>
int main() {
// 声明并初始化一个二维数组
int arr[3][4] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
// 声明一个指向二维数组的指针
int (*ptr)[3][4];
// 将指针指向 arr 数组
ptr = &arr;
// 通过指针访问数组元素
printf("arr[0][0] = %d\n", (*ptr)[0][0]); // 访问第一行第一列
printf("arr[2][3] = %d\n", (*ptr)[2][3]); // 访问第三行第四列
// 使用循环通过指针遍历数组
printf("全数组内容:\n");
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++) {
printf("%d ", (*ptr)[i][j]);
}
printf("\n");
}
return 0;
}
2、通过指针访问数组元素
在声明了指针后,可以使用指针算术来访问数组中的元素。
#include <stdio.h>
int main() {
// 声明一个二维数组
int arr[3][3] = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
// 声明一个指向二维数组的指针
int (*ptr)[3] = arr;
// 使用指针算术访问数组中的元素
printf("%d\n", ptr[0][1]); // 访问第一行第二列的元素 (2)
printf("%d\n", ptr[1][2]); // 访问第二行第三列的元素 (6)
printf("%d\n", ptr[2][0]); // 访问第三行第一列的元素 (7)
return 0;
}
3、动态分配二维数组内存
使用 malloc
动态分配二维数组。
#include <stdio.h>
#include <stdlib.h>
int main() {
int rows = 3, 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[1][1] = 2;
arr[2][2] = 3;
// 访问值
printf("%d\n", arr[0][0]); // 访问第一行第一列的元素
// 释放动态分配的内存
for (int i = 0; i < rows; i++) {
free(arr[i]);
}
free(arr);
return 0;
}