理论教育 零点起步:二维数组与多维数组简介

零点起步:二维数组与多维数组简介

时间:2023-10-19 理论教育 版权反馈
【摘要】:在C语言中,还可以使用二维数组、三维数组、甚至N维数组,一般统称为多维数组。二维数组元素功能与普通变量相同,可以进行运算和赋值。若用二维数组保存多个字符串,则可以用“二维数组名[i]”来表示其中的某一个字符串。

零点起步:二维数组与多维数组简介

本节前文所介绍的数组统称为一维数组。在C语言中,还可以使用二维数组、三维数组、甚至N维数组,一般统称为多维数组。由于多维数组的用法类似,所以这里以二维数组为例说明多维数组的定义和使用方法。

1.二维数组的定义

二维数组定义的一般形式如下所示。

978-7-111-33274-9-Chapter04-142.jpg

这里的某一维的长度常量要求与一维数组长度常量表达式要求相同。例如:

978-7-111-33274-9-Chapter04-143.jpg

这样定义了一个二维数组,第一维长度是4,第二维长度是3。其包含4个一维数组,分别是StringTable[0]、StringTable[1]、StringTable[2]和StringTable[3]。每个StringTable[i](i取值在0~3之间的整数)还是个一维数组,包含3个元素,分别是StringTable[i][0]、StringTable[i][1]、StringTable[i][2]。此二维数组定义的结果是定义了4×3=12个字符型(char)变量。其在内存中是连续存放的,存放形式如表4-8所示。

表4-8 二维数组在内存中的存放规律

978-7-111-33274-9-Chapter04-144.jpg

通过表4-8可以看出二维数组在内存中排列顺序是从最右边的下标开始依次递增变化,变化了一轮(取决于最后一维长度,本例中的一轮就是0、1、2)后其左侧的下标逐步变化。左侧的下标每变化一次,右侧的下标变化一轮。

对于其他多维数组的定义方法与二维数组相同,如定义一个三维数组:

978-7-111-33274-9-Chapter04-145.jpg

其数组元素排列顺序也遵从以上的规律。

2.二维数组的初始化

二维数组的初始化与一维数组类似,可以采用初始化列表的方式对二维数组中的每个元素赋初值。

以下是二维数组初始化的一个典型例子。(www.daowen.com)

978-7-111-33274-9-Chapter04-146.jpg

以上定义了一个二维数组,初始化结果如表4-9所示。

表4-9 二维数组初始化结果

978-7-111-33274-9-Chapter04-147.jpg

通过表4-9可以看出初始化顺序。由于是给二维数组做初始化,所以其初始化列表中每个逗号分隔的都是一维数组的初始化列表,即把第一个大括号({0xEE,'1'})中的元素作为初值赋给chKeyTable[0]这个一维数组,把第二个大括号({0xED,'2'})中的元素作为初值赋给chKeyTable[1]这个一维数组,依次类推。对于初始化列表中无初值的元素,编译器自动添0。

3.二维数组的使用

二维数组元素的表示形式为

978-7-111-33274-9-Chapter04-148.jpg

其中,下标1和下标2既可以是变量,也可以是常量,如chKeyTable[i][2]就代表二维数组中的一个元素。需要注意的是,下标1和下标2的最大值必须小于定义时对应维的长度,否则会造成意外的数据访问,可能破坏程序正常功能。

二维数组元素功能与普通变量相同,可以进行运算和赋值

978-7-111-33274-9-Chapter04-149.jpg

若用二维数组保存多个字符串,则可以用“二维数组名[i]”来表示其中的某一个字符串。例如:

978-7-111-33274-9-Chapter04-150.jpg

这样用strTable[0]就代表字符串“Reset…”,strTable[1]就代表字符串“Start”,依次类推。在程序设计时,修改strTable[i]中i的值就可以对应不同的字符串。这种二维数组的使用方式在编写菜单选择功能时经常用到。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈