10.11 总结

数组是由同一种数据类型的元素系列构成的。数组元素按顺序存储于内存中,通过使用整数索引(或偏移量)来访问。在C中,首元素的索引值为0,因此包含n个元素的数组的末元素索引为n-1。程序员要能够正确地使用数组索引,因为编译器和程序运行时都不检查索引是否合法。

要声明一个简单的一维数组,可以采用下面的形式:

广告:个人专属 VPN,独立 IP,无限流量,多机房切换,还可以屏蔽广告和恶意软件,每月最低仅 5 美元

阅读 ‧ 电子书库

此处,type是数组内每个元素的数据类型,name是数组名,size是元素的个数。传统上,C要求size是一个常量整数表达式。而C99标准则允许使用非常量整数表达式,这种情况下,数组是变长数组。

C把数组名解释为该数组首元素的地址。也就是说,数组名和指向首元素的指针是等价的。通常,数组和指针是紧密联系的。如果ar是数组,那么表达式ar[i]和*(ar+i)是等价的。

C不支持把整个数组作为函数参数进行传递,但是可以传递数组的地址。然后函数可以利用该地址来处理原始数组。如果函数功能不需要修改原始数组,那么在声明相应的形式参量时,需要加上关键字const。在被调函数中,您可以使用数组符号或指针符号。无论哪种形式,实际上使用的都是指针变量。

对指针加上一个整数或进行增量运算时,指针值的改变都是以所指向对象的字节大小为单位的。也就是说,如果pd指向数组内的一个8字节长的double数值,则对pd加1就相当于对它的值加上数值8。这样,该指针会指向数组的下一个元素。

二维数组表示数组的数组。例如:

阅读 ‧ 电子书库

这个声明创建了包含5个元素的数组sales,每个元素包含12个double数。这些一维数组的第1个可以写作sales[0],第2个可以写作为sales[1],等等。每个都是包含12个double数的数组。使用第二个索引可以访问这些数组中的每一个元素。例如,sales[2][5]是sales[2]的第6个元素,sales[2]是sales的第3个元素。

传统的C向函数传递多维数组的方法是把数组名(也就是地址)传递给相应类型的指针参量。指针的声明需要指定各维的大小(除了最左面的不需要明确指出大小);第一个参量的维数大小通常做为第二个参数来传递。例如,要处理前面提到的数组sales,函数原型和函数调用应该如下:

阅读 ‧ 电子书库

变长数组则提供了另一种方法,两个维大小都可以做为参数被传递给函数。因此,函数原型和函数调用就可以如下这样写:

阅读 ‧ 电子书库

本例使用了int数组和double数组,对于其他类型的数组,结论也都适用。然而,字符串有很多特殊的规则。这是由它的终止null字符决定的。有了这个终止字符,无须向函数传递字符串大小,函数就能够检测字符串的结束。在第11章“字符串和字符串函数”中我们将详细介绍字符串的特性。