跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
C 语言二维数组
”︁
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
= C语言二维数组 = 二维数组是C语言中一种重要的数据结构,它允许开发者以表格形式(行和列)存储和处理数据。理解二维数组对于处理矩阵、表格数据或任何需要网格状结构的场景至关重要。 == 定义与声明 == 二维数组的声明语法如下: <syntaxhighlight lang="c"> 数据类型 数组名[行数][列数]; </syntaxhighlight> 例如: <syntaxhighlight lang="c"> int matrix[3][4]; // 声明3行4列的整型数组 </syntaxhighlight> === 内存表示 === 二维数组在内存中是'''按行优先'''连续存储的。对于一个数组<code>int arr[2][3]</code>,内存布局如下: <mermaid> graph LR A[arr[0][0]] --> B[arr[0][1]] --> C[arr[0][2]] --> D[arr[1][0]] --> E[arr[1][1]] --> F[arr[1][2]] </mermaid> == 初始化方法 == 二维数组有多种初始化方式: 1. '''完全初始化''': <syntaxhighlight lang="c"> int matrix[2][3] = {{1, 2, 3}, {4, 5, 6}}; </syntaxhighlight> 2. '''部分初始化'''(未指定的元素自动初始化为0): <syntaxhighlight lang="c"> int matrix[2][3] = {{1}, {4, 5}}; </syntaxhighlight> 3. '''省略行数初始化'''(编译器自动推断): <syntaxhighlight lang="c"> int matrix[][3] = {{1, 2, 3}, {4, 5, 6}}; </syntaxhighlight> == 访问元素 == 通过双重索引访问元素,索引从0开始: <syntaxhighlight lang="c"> int value = matrix[1][2]; // 访问第2行第3列元素 </syntaxhighlight> == 示例程序 == 以下程序演示二维数组的基本操作: <syntaxhighlight lang="c"> #include <stdio.h> int main() { // 声明并初始化 int matrix[2][3] = {{1, 2, 3}, {4, 5, 6}}; // 打印数组 printf("二维数组内容:\n"); for(int i = 0; i < 2; i++) { for(int j = 0; j < 3; j++) { printf("%d ", matrix[i][j]); } printf("\n"); } // 计算总和 int sum = 0; for(int i = 0; i < 2; i++) { for(int j = 0; j < 3; j++) { sum += matrix[i][j]; } } printf("数组元素总和:%d\n", sum); return 0; } </syntaxhighlight> 输出: <pre> 二维数组内容: 1 2 3 4 5 6 数组元素总和:21 </pre> == 实际应用案例 == === 学生成绩管理系统 === 二维数组非常适合存储多个学生的多科成绩: <syntaxhighlight lang="c"> #include <stdio.h> #define STUDENTS 3 #define SUBJECTS 4 int main() { float grades[STUDENTS][SUBJECTS] = { {78.5, 82.0, 90.5, 87.0}, {85.0, 88.5, 92.0, 84.5}, {90.0, 91.5, 89.0, 93.5} }; // 计算每个学生的平均分 for(int i = 0; i < STUDENTS; i++) { float sum = 0; for(int j = 0; j < SUBJECTS; j++) { sum += grades[i][j]; } printf("学生%d的平均分:%.2f\n", i+1, sum/SUBJECTS); } return 0; } </syntaxhighlight> === 矩阵运算 === 二维数组是矩阵运算的基础: <syntaxhighlight lang="c"> #include <stdio.h> #define ROWS 2 #define COLS 2 void matrixAddition(int a[ROWS][COLS], int b[ROWS][COLS], int result[ROWS][COLS]) { for(int i = 0; i < ROWS; i++) { for(int j = 0; j < COLS; j++) { result[i][j] = a[i][j] + b[i][j]; } } } int main() { int matrix1[ROWS][COLS] = {{1, 2}, {3, 4}}; int matrix2[ROWS][COLS] = {{5, 6}, {7, 8}}; int sum[ROWS][COLS]; matrixAddition(matrix1, matrix2, sum); printf("矩阵相加结果:\n"); for(int i = 0; i < ROWS; i++) { for(int j = 0; j < COLS; j++) { printf("%d ", sum[i][j]); } printf("\n"); } return 0; } </syntaxhighlight> == 高级主题 == === 指针与二维数组 === 二维数组名是指向第一行的指针。对于数组<code>int arr[3][4]</code>: * <code>arr</code> 的类型是 <code>int (*)[4]</code> * <code>arr[i]</code> 的类型是 <code>int *</code> === 动态分配 === 可以使用指针数组动态分配二维数组: <syntaxhighlight lang="c"> #include <stdio.h> #include <stdlib.h> int main() { int rows = 3, cols = 4; int **matrix = (int **)malloc(rows * sizeof(int *)); for(int i = 0; i < rows; i++) { matrix[i] = (int *)malloc(cols * sizeof(int)); } // 使用矩阵... // 释放内存 for(int i = 0; i < rows; i++) { free(matrix[i]); } free(matrix); return 0; } </syntaxhighlight> == 常见问题 == * '''数组越界''':C语言不检查数组边界,访问超出范围的元素会导致未定义行为 * '''内存布局误解''':二维数组在内存中是连续的,不是"数组的数组" * '''初始化错误''':列数必须在声明时指定,行数可以省略 == 数学表示 == 二维数组可以表示为数学中的矩阵: <math> A_{m \times n} = \begin{bmatrix} a_{0,0} & a_{0,1} & \cdots & a_{0,n-1} \\ a_{1,0} & a_{1,1} & \cdots & a_{1,n-1} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m-1,0} & a_{m-1,1} & \cdots & a_{m-1,n-1} \end{bmatrix} </math> == 总结 == 二维数组是C语言中处理表格数据的强大工具。通过本教程,您应该已经掌握了: * 二维数组的声明和初始化方法 * 元素的访问和遍历技巧 * 实际应用场景的实现 * 高级主题如指针关系和动态分配 理解这些概念将为学习更复杂的数据结构和算法奠定坚实基础。 [[Category:编程语言]] [[Category:C]] [[Category:C 语言数组]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)