二维数组的概念及用法
时间: 2024-12-26 15:18:03 浏览: 26
### 二维数组的概念
在编程中,二维数组是一种特殊类型的数组,其元素也是数组。这意味着每个元素本身可以存储多个值。通常情况下,这些子数组具有相同的长度,形成矩阵结构。对于 C 语言而言,声明一个二维数组可以通过指定两个维度的大小来完成。
例如,在 C 中定义一个 `m×n` 的整型二维数组如下所示:
```c
int array[m][n];
```
这里 `array[i][j]` 表示位于第 i 行 j 列位置上的元素[^1]。
### 定义和初始化二维数组的方法
有两种主要方式用于创建并初始化二维数组:静态分配与动态分配。当尺寸固定时可采用前者;而后者则适用于运行期间未知的具体规模情况。
#### 静态分配
这是最简单的方式之一,直接给出所有元素的确切数值来进行初始化:
```c
// 初始化 m*n 大小的整形二维数组
int matrix[][3] = {
{1, 2, 3},
{4, 5, 6}
};
```
上述代码片段展示了如何通过提供初始值列表的方式来建立一个两行三列的整数矩阵。
#### 动态分配
如果事先不知道确切的数量,则需借助于指针以及内存管理函数(如 malloc() 或 calloc()) 来实现更灵活的操作模式:
```c
#include <stdlib.h>
...
// 声明指向 int 类型的一维指针变量 p 和 q
int **p;
int *q;
// 分配足够的空间容纳 n 个 int* 类型的对象作为行向量
if ((p=(int**)malloc(n*sizeof(int*)))==NULL){
printf("Out of memory\n");
}
for (i=0;i<n;++i){
// 对每一行都单独申请一块连续的空间用来保存该行内的各个元素
if((*(p+i)=(int*)malloc(m*sizeof(int)))==NULL){
printf("Out of memory\n");
}
}
...
free(p);
```
这段程序说明了怎样利用双重指针构建一个多维表单,并且记得释放不再使用的资源以防止泄漏问题的发生。
### 访问和遍历二维数组
一旦建立了这样的表格之后就可以很方便地对其进行读写访问了。假设有一个名为 table 的双层索引容器,那么获取其中某个特定项就变得非常直观——只需按照常规下标的语法形式即可达成目标:`table[rowIndex][columnIndex]`.
为了展示整个数据集的内容,往往还需要编写循环语句逐一遍历每一个成员节点直到结束为止。下面给出了这样一个例子:
```c
void printMatrix(int mat[][N], size_t rows, size_t cols) {
for(size_t r = 0; r<rows ;++r){
for(size_t c = 0;c<cols;++c){
printf("%d ",mat[r][c]);
}
putchar('\n');
}
}
```
此函数接受任意规格化的矩形区域作为参数输入,并依次打印出各单元格里的具体数字序列。
阅读全文