欢迎光临散文网 会员登陆 & 注册

第 11 讲:数组

2021-09-05 19:42 作者:SunnieShine  | 我要投稿

数组是什么?

在前文的知识点里,我们描述了很多有关重复性的内容,例如 C 语言提供的三大循环语句:whiledo-whilefor 循环,还谈论了 for 的各种“奇葩”用法。今天要讲的重复性内容,并非针对执行操作,而是针对于数值存储。

试想一下,如果我们需要大量信息,而且它们需要的内容的类型近乎一致。比如我们要存储 50 个学生的数学成绩,如果我们单纯使用 50 个变量的话,显然是不好读也不好取。那么,有没有办法解决呢?有,这便是我们今天要说到的新的知识点:数组(Array)。


数组的定义

数组有类型(Type)一说,有维度(Rank)一说,也有长度(Length)一说,这是在初始定义的时候为其决定的,这类似于变量的定义。语法约定是这样的:

这样便定义了一个数组(有时候也把数组直接叫做数组变量),这个数组一共存放 50 个元素,且全部都是 int 类型的元素。

数组一共具有三大属性:类型、维度和长度,那么针对于这个数组变量而言,它的类型是 int,维度是一维的,而长度是 50(即总元素个数)。所谓的维度,就是数组整体呈现几个维度的形式。我们今天讲的内容都是一维数组,即只有一个维度。


数组的赋值

数组赋值有两种操作,一种是自定义数据,在初始化的方式赋值,还有一种是后续赋值,后续赋值就需要借助循环语句来实现,因为它是采用的逐个元素的赋值的逻辑。


初始化赋值

初始化赋值方式是在定义语句上直接使用赋值符号 = 和一个大括号表示的集合序列来赋值的。

下面为了简化赋值,这里把 50 个元素更改为 10 个元素的数组,进行赋值。

这样的赋值操作是逐个对应的。这个 scores 数组的第一个元素数值是 1,第二个元素是 2,第三个是 4,第四个是 8,以此类推。

如果你赋值的数值过多,编译器层面就会报错,提示你不遵循语法规则,exe 的文件都不会让你成功生成。

不过,元素如果不够 10 个的话,赋值是成功的,也是不会出错的,但是剩余的元素都会被默认赋值为 0。

这表示 scores 数组里最后 6 个元素全部为 0。

但请注意。如果初始化不给出大括号的赋值语句,这个数组就是空的,即没有赋值的状态。如果在没有初始化的情况就在使用这个数组的话,就会容易出现程序崩溃的错误。所以请尽量避免这个操作。

如果你想把数组全部赋值为 0,可以采用下面两种方式赋值:

这是第一种赋值方式,小括号第一个部分写上数组名称,第二个部分写上赋值的初始值(这里是 0,其它数值需要非常复杂的转换得到,这里不作出讲解),第三个部分写上数组整体占的内存大小。

第二种是用大括号这种熟悉的方式赋值,只需要在大括号里写一个元素 0 即可。

这样就可以了,因为其它没有赋值的部分都会默认赋值为 0,而此时给了第一个元素也赋值为 0,所以相当于就是全部为 0 了。

在明确赋值元素足够的时候,中括号里的数值可以不写。比如

 int scores[] = { 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024 };

就等价于

 int scores[10] = { 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024 };

中括号里的数值,就等于后面大括号里元素的总个数 10 个。

后续赋值

你也可以借用循环语句赋值,但需要讲解存取数组的元素的语法才可以。现在我们来说一下,如何取出数组里的元素,和修改这些元素的值。


数组初始化的长度是否可以用变量表示?

思考一个问题。我们是否可以用一个变量来表示数组的长度呢?

这么书写,是否表示输入的数值是多少,数组初始化的时候长度就是多少呢?

在 C99 标准之前,这种写法一直都是不被允许的。在考试过程时,一般也不允许这种写法,不过 C99 标准开始允许你这么声明数组,即可变长数组(Variable Length Array,简称 VLA)。VLA 这种特性是在 C99 标准才引入的,所以如果你需要使用 VLA,考试里则是肯定不允许的。


数组内元素的存取

前文讲述了如何使用数组进行定义和初始化,它采用的是中括号的方式,写在数组名称的后面,中括号里写上总元素个数来表达。

在存取元素的时候,我们依旧用的是中括号,而且稍微在使用上和初始化里的中括号有一点区别:

我们要取出上述第三个元素的话,请使用 [第几个元素 - 1] 的方式来取值。

在 C 语言里,取值是从 0 开始的,并非 1 开始,所以需要你注意数组取值的时候,中括号里写的数值是多少。比如取出第三个元素,则写的是 array[2],而非 array[3]

那么,整体使用的格式是这样的:

这个程序将会输出 96。

下面就可以说下后续赋值的方式了。

由于我们学习了循环语句,所以我们可以采用方便 for 循环为其赋值。

请注意,数组赋值用到了 for 循环,而我们之前说过,取值的中括号里写的数字是从 0 开始算的,所以最大的元素值是 9(因为 0 到 9 一共是 10 个元素了),所以初始化赋值的时候 i = 0 而不是 i = 1,因为这个 i 就是表示这个中括号里的数值的;而条件写的是 i < 10 而不是 i <= 10

而上述逻辑里的 arr[i] 就表示 arr 数组的第 i + 1 个元素。比如 i 是 6,则 arr[i] 就表示的是第七个元素,因为从 0 开始计算。而最终执行完毕这个 for 后,整个数组的数值就是 1、2、3、4、5、6、7、8、9、10 了。

当然,你还可以为其进行手动赋值:

这样就可以为这个数组的第 2、7、10 个元素赋值 3、8 和 14,而其余元素的数值都会被默认初始化为 0。

第 11 讲:数组的评论 (共 条)

分享到微博请遵守国家法律