学科分类
目录
C语言

二维数组的定义与初始化

二维数组是指维数为2的数组,即数组有两个索引,二维数组的定义方式与一维数组类似,其语法格式如下:

数据类型数组名[常量表达式1][常量表达式2];

在上述语法格式中,“常量表达式1”是行的长度,被称为行索引;“常量表达式2”是列的长度,被称为列索引。

例如,定义一个3行4列的二维数组,示例代码如下:

int arr[3][4];

在上述定义的二维数组中,共包含3*4个元素,即12个元素。接下来,通过一张图来描述二维数组arr的逻辑存储形式,如图1所示。

图1 arr[3][4]二维数组逻辑存储形式

从图1中可以看出,二维数组arr是按行进行存放的,先存放第1行,再存放第2行,最后存放第3行,并且每行有4个元素,也是依次存放的。在第1行中,所有元素的行索引都是arr[0],在第2行的行索引都是arr[1],第3行的行索引都是arr[2]。二维数组写成行和列的排列形式,有助于形象化的理解二维数组的逻辑结构,由行列组成的二维数组通常也被称为矩阵。

完成二维数组的定义后,对二维数组进行初始化,初始化二维数组的方式有4种,具体如下。

1、按行给二维数组赋初值

按行给二维数组赋初值,每一行的元素使用一对{}括起来,示例代码如下:

int arr1[2][3] = {{1,2,3},{4,5,6}};

在上述代码中,等号后面最外层的一对大括号{}表示数组arr1的边界,该对大括号中的第1对{}括号代表的是第1行的数组元素,第2对{}括号代表的是第2行的数组元素。

2、将所有的数组元素按顺序写在1个大括号内

将数组所有元素按顺序写在一个大括号中,这种方式初始化类似于一维数组,将所有元素写在一对{}内,编译器会根据行列索引的大小自动划分行和列,示例代码如下:

int arr2[2][3] = {1,2,3,4,5,6};

在上述代码中,二维数组arr2共有两行,每行有3个元素,编译器在存储数组元素时,会根据元素的个数自动将元素从前往后划分为2行3列,第1行的元素依次为1、2、3,第2行元素依次为4、5、6。

3、对部分数组元素赋初值

二维数组可以只对一部分元素赋初值,示例代码如下:

int arr3[3][4] = {{1},{4,3},{2,1,2}};

在上述代码中,数组arr3可以存储3×4=12个元素,但在初始化时只对部分元素进行了赋值,对于没有赋值的元素,系统会自动赋值为0,数组arr3的逻辑存储方式如图2所示。

图2 数组arr3的逻辑存储形式

在图2中,二维数组中没有赋值的元素,系统自动为其赋值为0。需要注意的是,二维数组中的表示行列范围的{}符号作用很大,在数组arr3中,如果每行的元素值没有使用{}括起来,则编译器会根据行列大小优先分配给前面的行。示例代码如下:

int arr4[3][4] = {1,4,3,2,1,2};

上述代码中,数组arr4只对一部分元素赋值,但是没有使用{}指定行,则元素1、4、3、2优先分配给第1行;元素1、2分配给第2行,剩余的元素默认初始化为0。数组arr4的逻辑存储形式如图3所示。

图3 数组arr4的逻辑存储形式

4、省略行索引的初始化

如果对二维数组全部数组元素初始化,则二维数组的行索引可省略,但列索引不能省略,示例代码如下:

int arr5[2][3] = {1,2,3,4,5,6};

可以写为:

int arr5[][3] = {1,2,3,4,5,6};

系统会根据固定的列数,将元素值进行划分,自动将行数定为2。

点击此处
隐藏目录