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