C语言课程第4篇
第4章 数组 4.1 数组的基本概念 4.2 一维数组 4.3 二维数组 4.4 字符数组与字符串 * * 1. 2. 3. 本章讲述内容: 一维数组 ; 二维数组 ; 字符数组和字符串 。 给出数组的名字,用它来代表这些数据的整体。为数组起名字,应该符合C语言对标识符的规定。 . 所谓“数组”,是用一个名字去代表相同数据类型元素的有序集合,用对应的序号来区分这个集合中的一个个元素。所起的名字,称为“数组名”,序号称为数组元素的“下标”。 . 用一个下标来区分其元素的数组,称为“一维数组”;用两个或多个下标来区分其元素的数组,称为“二维数组”或“多维数组”。 . 在程序中说明一个数组后,系统就为它在内存分配一个连续的存储区,顺序存放该数组中的元素。这个存储区所需要的字节数,按如下公式计算: 总字节数 = 数组元素个数?×?数据类型长度 . 数组说明向系统传达的信息 (1) (2) 指明数组元素的数据类型。 (3) 确定数组的大小,即该数组包含的元素个数,得到所需连续存储区的规模。 . 当数据类型一样时,数组说明和变量说明可以混同在一个语句里。也就是说,只要数据类型相同,一个说明语句里,既可以有变量说明,也可以有数组说明,它们的中间用逗号隔开即可。 比如,语句: int array [8]; 说明一个名为array的整型数组,它有8个元素,每个元素都是int型的变量。这8个元素各自的名称是: array[0],array[1],array[2],array[3],array[4],array[5],array[6],array[7] 4.2.1 一维数组的说明 . 说明一维数组的语句格式是: . . C语言数组元素下标从0开始。本书约定,称array[0] 为第1个元素,array[1]为第2个元素,array[2]为第3个元素,如此等等。 . C语言规定,数组名就是分配给该数组的存储区的起始地址。也就是说,一维数组的名字不是变量,而是一个内存地址常量(无符号数),只有它的元素才是变量。 []; 可以是auto(自动型)、static(静态型),存储类型省略时,默认是auto型的;可以是基本类型,也可是指针型、结构型等;是符合标识符规定的名字;是用方括号括住的整型常量,数值是该数组拥有的元素个数。 . 在程序中说明有5个元素的一个整型数组ab[5],打印输出数组存储区的首地址和各元素的地址。 例: #include "stdio.h" main() { ?int ab[5]; ?int j; ?printf ("ab = %u\n", ab); ?for(j = 0; j<5; j++) printf ("&ab[%d] = %u\n", j, &ab[j]); } (1) 程序实现 (2) 分析与讨论 地址是一个无符号数,程序中要打印变量的地址时,在printf中应该使用格式符“%u”。 . 按C语言的规定,数组名ab是分配给该数组的存储区起始地址。所以,直接把它以“%u”格式打印出来即可。数组的各元素是变量,它们的地址应在变量名前加取地址符&,即:&ab[0],&ab[1],&ab[2],&ab[3],&ab[4]。 ab与&ab[0]的值是一样的。但含义不同,前者表示的是整个存储区的起址,后者仅是第1个元素(ab[0])的地址。左边 是程序的运行结果和存 储分配的示意。 . ab:65490 ab[0] 65492 ab[1] 65494 ab[2] 65496 ab[3] 65498 ab[4] 若数组说明时给出,但只依次为前几个元素赋了初值。那C语言将自动对余下元素赋初值:为数值型的赋0(或0.0);为字符型的赋空字符。 若说明时是对数组的所有元素赋初值,那在数组说明中可省略(方括号不能没有)。 4.2.2 一维数组元素的初始化 所谓一维数组的初始化,即指在说明数组的同时为其诸元素(变量)赋初值。完整的数组说明语句格式为: . . 比如,有如下数组说明语句: float f[4] = {0.1, 1.1, 2.1, 3.1}; 表示名为f的数组有4个元素,存储类型