多维数组用于存储矩阵、表格等复杂结构数据。东巴文(db-w.cn) 将带你深入理解多维数组,掌握其核心应用。
💡 东巴文观点:多维数组是数组的数组,通过多个下标访问元素,是处理矩阵和表格数据的基础。
东巴文说明:多维数组是数组的数组,通过多个下标访问元素,用于存储矩阵、表格等复杂结构。
东巴文多维数组特点:
多维数组特点
├── 多个维度
├── 多个下标访问
├── 内存连续
├── 长度固定
└── 可视为矩阵/表格
#include <stdio.h>
int main() {
printf("=== 东巴文二维数组声明与初始化 ===\n\n");
// 声明
int matrix1[3][4];
// 完全初始化
int matrix2[3][4] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
// 部分初始化
int matrix3[3][4] = {
{1, 2},
{5},
{9, 10, 11}
};
// 自动推断行数
int matrix4[][4] = {
{1, 2, 3, 4},
{5, 6, 7, 8}
};
// 打印matrix2
printf("matrix2:\n");
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++) {
printf("%2d ", matrix2[i][j]);
}
printf("\n");
}
return 0;
}
#include <stdio.h>
int main() {
printf("=== 东巴文二维数组访问 ===\n\n");
int matrix[3][3] = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
// 访问元素
printf("matrix[0][0] = %d\n", matrix[0][0]);
printf("matrix[1][1] = %d\n", matrix[1][1]);
printf("matrix[2][2] = %d\n", matrix[2][2]);
// 修改元素
matrix[1][1] = 50;
printf("修改后 matrix[1][1] = %d\n", matrix[1][1]);
// 遍历二维数组
printf("\n遍历二维数组:\n");
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
printf("%d ", matrix[i][j]);
}
printf("\n");
}
return 0;
}
#include <stdio.h>
int main() {
printf("=== 东巴文二维数组内存布局 ===\n\n");
int matrix[3][3] = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
printf("二维数组内存布局:\n");
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
printf("&matrix[%d][%d] = %p, 值 = %d\n",
i, j, &matrix[i][j], matrix[i][j]);
}
}
printf("\n数组首地址:%p\n", matrix);
printf("数组大小:%zu 字节\n", sizeof(matrix));
printf("行数:%zu\n", sizeof(matrix) / sizeof(matrix[0]));
printf("列数:%zu\n", sizeof(matrix[0]) / sizeof(matrix[0][0]));
return 0;
}
东巴文说明:
#include <stdio.h>
int main() {
printf("=== 东巴文矩阵运算 ===\n\n");
int matrix1[2][3] = {
{1, 2, 3},
{4, 5, 6}
};
int matrix2[2][3] = {
{7, 8, 9},
{10, 11, 12}
};
int sum[2][3];
// 矩阵加法
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
sum[i][j] = matrix1[i][j] + matrix2[i][j];
}
}
printf("矩阵1:\n");
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
printf("%d ", matrix1[i][j]);
}
printf("\n");
}
printf("\n矩阵2:\n");
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
printf("%d ", matrix2[i][j]);
}
printf("\n");
}
printf("\n矩阵和:\n");
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
printf("%d ", sum[i][j]);
}
printf("\n");
}
return 0;
}
#include <stdio.h>
int main() {
printf("=== 东巴文矩阵转置 ===\n\n");
int matrix[2][3] = {
{1, 2, 3},
{4, 5, 6}
};
int transpose[3][2];
// 转置
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
transpose[j][i] = matrix[i][j];
}
}
printf("原矩阵(2x3):\n");
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
printf("%d ", matrix[i][j]);
}
printf("\n");
}
printf("\n转置矩阵(3x2):\n");
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 2; j++) {
printf("%d ", transpose[i][j]);
}
printf("\n");
}
return 0;
}
#include <stdio.h>
int main() {
printf("=== 东巴文学生成绩管理 ===\n\n");
// 3个学生,4门课程
int scores[3][4] = {
{85, 90, 78, 92},
{76, 88, 95, 87},
{90, 85, 88, 93}
};
char *courses[] = {"数学", "英语", "物理", "化学"};
// 计算每个学生的总分和平均分
printf("学生成绩统计:\n");
for (int i = 0; i < 3; i++) {
int sum = 0;
printf("\n学生%d:\n", i + 1);
for (int j = 0; j < 4; j++) {
printf(" %s:%d\n", courses[j], scores[i][j]);
sum += scores[i][j];
}
printf(" 总分:%d\n", sum);
printf(" 平均分:%.2f\n", (double)sum / 4);
}
// 计算每门课程的平均分
printf("\n课程平均分:\n");
for (int j = 0; j < 4; j++) {
int sum = 0;
for (int i = 0; i < 3; i++) {
sum += scores[i][j];
}
printf("%s:%.2f\n", courses[j], (double)sum / 3);
}
return 0;
}
#include <stdio.h>
#define ROWS 5
#define COLS 5
// 打印图像
void printImage(int image[ROWS][COLS]) {
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLS; j++) {
printf("%2d ", image[i][j]);
}
printf("\n");
}
}
// 图像旋转90度
void rotateImage(int image[ROWS][COLS], int rotated[COLS][ROWS]) {
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLS; j++) {
rotated[j][ROWS - 1 - i] = image[i][j];
}
}
}
int main() {
printf("=== 东巴文图像处理 ===\n\n");
int image[ROWS][COLS] = {
{1, 2, 3, 4, 5},
{6, 7, 8, 9, 10},
{11, 12, 13, 14, 15},
{16, 17, 18, 19, 20},
{21, 22, 23, 24, 25}
};
int rotated[COLS][ROWS];
printf("原图像:\n");
printImage(image);
rotateImage(image, rotated);
printf("\n旋转90度后:\n");
for (int i = 0; i < COLS; i++) {
for (int j = 0; j < ROWS; j++) {
printf("%2d ", rotated[i][j]);
}
printf("\n");
}
return 0;
}
#include <stdio.h>
#define ROWS 3
#define COLS 4
// 打印二维数组
void printMatrix(int rows, int cols, int matrix[rows][cols]) {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
printf("%d ", matrix[i][j]);
}
printf("\n");
}
}
// 计算矩阵元素和
int sumMatrix(int rows, int cols, int matrix[rows][cols]) {
int sum = 0;
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
sum += matrix[i][j];
}
}
return sum;
}
int main() {
printf("=== 东巴文二维数组与函数 ===\n\n");
int matrix[ROWS][COLS] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
printf("矩阵:\n");
printMatrix(ROWS, COLS, matrix);
int sum = sumMatrix(ROWS, COLS, matrix);
printf("\n矩阵元素和:%d\n", sum);
return 0;
}
#include <stdio.h>
int main() {
printf("=== 东巴文三维数组 ===\n\n");
// 2层,3行,4列
int arr[2][3][4] = {
{
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
},
{
{13, 14, 15, 16},
{17, 18, 19, 20},
{21, 22, 23, 24}
}
};
// 遍历三维数组
for (int i = 0; i < 2; i++) {
printf("第%d层:\n", i + 1);
for (int j = 0; j < 3; j++) {
for (int k = 0; k < 4; k++) {
printf("%2d ", arr[i][j][k]);
}
printf("\n");
}
printf("\n");
}
return 0;
}
#include <stdio.h>
#define HEIGHT 3
#define WIDTH 3
#define CHANNELS 3 // R, G, B
int main() {
printf("=== 东巴文RGB图像 ===\n\n");
// RGB图像:3x3像素,每个像素有R、G、B三个通道
unsigned char image[HEIGHT][WIDTH][CHANNELS] = {
{{255, 0, 0}, {0, 255, 0}, {0, 0, 255}}, // 红、绿、蓝
{{255, 255, 0}, {255, 0, 255}, {0, 255, 255}}, // 黄、品红、青
{{255, 255, 255}, {128, 128, 128}, {0, 0, 0}} // 白、灰、黑
};
printf("RGB图像数据:\n");
for (int i = 0; i < HEIGHT; i++) {
for (int j = 0; j < WIDTH; j++) {
printf("像素[%d][%d]: R=%3d, G=%3d, B=%3d\n",
i, j, image[i][j][0], image[i][j][1], image[i][j][2]);
}
}
return 0;
}
#include <stdio.h>
#define ROWS 5
#define COLS 5
// 打印迷宫
void printMaze(int maze[ROWS][COLS]) {
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLS; j++) {
if (maze[i][j] == 0) {
printf("□ "); // 通路
} else {
printf("■ "); // 墙壁
}
}
printf("\n");
}
}
int main() {
printf("=== 东巴文迷宫问题 ===\n\n");
// 0表示通路,1表示墙壁
int maze[ROWS][COLS] = {
{0, 1, 0, 0, 0},
{0, 1, 0, 1, 0},
{0, 0, 0, 1, 0},
{0, 1, 1, 1, 0},
{0, 0, 0, 0, 0}
};
printf("迷宫:\n");
printMaze(maze);
printf("\n图例:□ = 通路, ■ = 墙壁\n");
return 0;
}
#include <stdio.h>
#define ROWS 5
#define COLS 5
// 打印生命游戏状态
void printLife(int grid[ROWS][COLS]) {
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLS; j++) {
printf("%c ", grid[i][j] ? '●' : '○');
}
printf("\n");
}
}
// 计算邻居数量
int countNeighbors(int grid[ROWS][COLS], int row, int col) {
int count = 0;
for (int i = -1; i <= 1; i++) {
for (int j = -1; j <= 1; j++) {
if (i == 0 && j == 0) continue;
int newRow = row + i;
int newCol = col + j;
if (newRow >= 0 && newRow < ROWS &&
newCol >= 0 && newCol < COLS) {
count += grid[newRow][newCol];
}
}
}
return count;
}
int main() {
printf("=== 东巴文生命游戏 ===\n\n");
int grid[ROWS][COLS] = {
{0, 1, 0, 0, 0},
{0, 0, 1, 0, 0},
{1, 1, 1, 0, 0},
{0, 0, 0, 0, 0},
{0, 0, 0, 0, 0}
};
printf("初始状态:\n");
printLife(grid);
printf("\n图例:● = 活细胞, ○ = 死细胞\n");
return 0;
}
#include <stdio.h>
#define ROWS 3
#define COLS 4
int main() {
printf("=== 东巴文使用宏定义数组大小 ===\n\n");
// ✅ 推荐:使用宏定义
int matrix[ROWS][COLS] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
printf("矩阵:\n");
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLS; j++) {
printf("%d ", matrix[i][j]);
}
printf("\n");
}
return 0;
}
#include <stdio.h>
int main() {
printf("=== 东巴文初始化多维数组 ===\n\n");
// ✅ 推荐:初始化为0
int matrix1[3][4] = {0};
// ✅ 推荐:完全初始化
int matrix2[3][4] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
printf("matrix1:\n");
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++) {
printf("%d ", matrix1[i][j]);
}
printf("\n");
}
return 0;
}
#include <stdio.h>
#define ROWS 3
#define COLS 4
int main() {
printf("=== 东巴文多维数组边界检查 ===\n\n");
int matrix[ROWS][COLS] = {0};
// ✅ 正确:检查边界
int row = 2, col = 3;
if (row >= 0 && row < ROWS && col >= 0 && col < COLS) {
matrix[row][col] = 100;
printf("matrix[%d][%d] = %d\n", row, col, matrix[row][col]);
} else {
printf("索引越界\n");
}
return 0;
}
完成本章学习后,请确认:
掌握多维数组后,你可以继续学习:
如果遇到问题,欢迎访问 东巴文(db-w.cn) 获取帮助!
东巴文(db-w.cn) - 让编程学习更简单
📦 东巴文多维数组提示:多维数组是处理矩阵和表格数据的基础,掌握多维数组是开发复杂应用的关键。在 db-w.cn,我们会通过大量实例帮你掌握多维数组的使用!