一、二维数组的概念
二维数组是一种常见的数据结构,在C语言中用于存储和操作二维数据。它可以看作是由多个一维数组组成的数据结构,每一个一维数组都是二维数组中的一行。
与一维数组不同的是,二维数组需要两个索引来访问数组中的元素。第一个索引代表行号,第二个索引代表列号。例如,对于一个包含3行4列的二维数组,第二个元素的索引是[0][1],最后一个元素的索引是[2][3]。
可以把二维数组想象成一个表格,其中的每一个单元都包含一个特定的数据。在C语言中,可以用二维数组存储各种类型的数据,例如整型、浮点型、字符型。
二、二维数组的声明和初始化
声明
声明二位数组的方法和一维数组的方法相似,在创建二维数组时,要说明数组的数据类型、数组名、数组大小。
举例:创建一个三行四列的二维数组,数据类型为整型。
int arr[3][4]
//int为数组的数据类型
//arr为数组的名称
//[3]表示该数组有三行
//[4]表示该数组每一行有四个元素
初始化
2.1 不完全初始化
//部分初始化
int arr_1[3][5]={0,1};//对数组arr_1的第一个元素和第二个元素赋值
float arr_2[6][6]={6.6,8.8};//对数组arr_2的第一个元素和第二个元素赋值
2.2 完全初始化
int arr_3[2][2]={1,2,3,4};
2.3 按照行进行初始化
int arr_4[3][3]={{1,2,3},{4,5,6},{7,8,9}};
2.4 声明数组时省略行
在对二维数组进行声明时,省略了行号,但不能省略列号,此时一定要给出初始化表达式,编译器可以从初始化结果推断出有多少行。
int arr_5[][3]={{1,2},{3,4},{5,6}};
int arr_6[][5]={1,2,3,4,5,6};
三、二维数组的使用
3.1 数组下标
举例:通过元素下标对数组元素进行访问
int arr[3][3]={{1,2,3},{4,5,6},{7,8,9}};
printf("%d",arr[2][1]);//打印数组中的第三行第二个元素
3.2 数组元素的输入输出
#include<stdio.h>
int main()
{
int arr[2][3];
int i;//代表行号
int j;//代表列号
//输入
//通过循环,遍历数组中的每一个元素,逐一进行赋值
for (i = 0; i < 2; i++)//遍历行号
{
for (j = 0; j < 3; j++)//遍历列号
{
scanf("%d", &arr[i][j]);
}
}
//输出
//通过循环,遍历数组中的每一个元素,逐一对每个元素的数据进行读取
for (i = 0; i < 2; i++)//遍历行号
{
for (j = 0; j < 3; j++)//遍历列号
{
printf("%d ", arr[i][j]);
}
printf("\n");
}
return 0;
}
3.3 二维数组在内存中的存储
#include<stdio.h>
int main()
{
int arr[2][3] = { {1,2,3},{4,5,6} };
int i;//代表行号
int j;//代表列号
//输出
//通过循环,遍历数组中的每一个元素,逐一对每个元素的数据进行读取
for (i = 0; i < 2; i++)//遍历行号
{
for (j = 0; j < 3; j++)//遍历列号
{
printf("arr[%d][%d]=%d",i,j, &arr[i][j]);//打印出每个元素的存储地址
printf("\n");
}
}
return 0;
}
从以上代码的结果可以看出,二维数组中的元素是连续存贮的。