1、1.8 构造数据类型,1.数组,数组是一组具有固定数目和相同类型成分分量的有序集合。各成分分量称为数组元素。数组有一维、二维、三维和多维数组之分。,2.一维数组,(1)定义方式 类型说明符 数组名常量表达式类型是指每一个数组元素的数据类型, 包括整数型、浮点型、字符型、指针型以及结构和联合。数组名,与变量名一样,必须遵循标识符命名规则。常量表达式必须用方括号括起来,指的是数组的元素个数(又称数组长度),它是一个整型值,其中可以包含常数和符号常量,但不能包含变量。数组元素的下标,是元素相对于数组起始地址的偏移量,所以从0开始顺序编号。 int a6; /a0,a1, a2,a3, a4,a5 u
2、nsigned long a3+4; #define N 5 char *sN;,2.一维数组,(1)定义方式 int a16; unsigned long a20; char *s5; char *f ;数组元素的类型为数组的基本类型。如:整型数组的数组元素为整型变量,字符型数组的数组元素为字符型变量。构成一个数组的各元素必须是同一类型的变量,不允许在同一个数组中出现不同类型的变量。数组数据是用同一个名字的不同下标访问的,数组的下标放在方括号中,是从0(0,1,n)开始的一组有序数据。,2.一维数组,(2)初始化 在定义说明数组的同时,给数组赋新值。对数组的全部元素赋初值: int idat
3、a a6=0,1,2,3,4,5;只对数组的部分元素初始化: int idata a6=0,1,2,; /只给数组a的前面三个元素赋了初始值,未赋初值的元素的值在此默认为0。不对数组的全部元素赋初值: int idata a6; /数组a的每个分量的值在未赋值或输入其值之前将是未知的。 初始化时不指定数组元素的个数: int idata a =1,2,3; /若初值的个数小于数组元素的个数,则初始化时不能省略数组元素的个数,初值的个数不能大于数组元素的个数。,3.二维数组,(1)定义方式 类型说明符 数组名常量表达式1常量表达式2 如:int a34; 数组元素个数=常量表达式1 常量表达式2
4、; 如:a34共有3行4列=12个元素,顺序为: a00 a01 a02 a03 a10 a11 a12 a13 a20 a21 a22 a23数组占用的内存空间=常量表达式1 常量表达式2 数组数据类型占用的字节数; 如:int a34占用的内存空间=342=24字节。,3.二维数组,(2)初始化:对数组的全部元素赋初值: 分行给二维数组的全部元素赋值。 如:int a34=1,2,3,4,5,6,7,8,9,10,11,12; 第一个花括号内的数据赋给第一行元素,第二个花括号内的数据赋给第二行元素,依次类推。 将所有数据写在一个花括号内,按数组的排列顺序对各元素赋初值。 如:int a34
5、=1,2,3,4,5,6,7,8,9,10,11,12;对数组中部分元素赋初值: 如: int a34=1,5,9; int a34=1, ,5,9;,1 0 0 05 0 0 09 0 0 0,1 0 0 00 0 0 05 9 0 0,4.字符数组,定义:基本类型为字符类型的数组称为字符类型。在字符数组中,一个元素存放一个字符。 char a10; /定义了一个有10个字符元素的一维数组。初始化: 将各字符逐个赋给数组中的各元素。 如: char a10=B, E, I, , J,I,N,G, 0; 剩余的元素被系统自动赋予空格字符,如a9。 字符串直接给字符数组置初值。 如: char
6、a10=“BEI JING”; char a10=“BEI JING”; 一个字符串可以用一个一维数组来装入,但数组长度要比字符多一个,以便编译器自动在其后面加入结束符0。 如: char ch = Good; 则数组ch的元素个数是5,而不是4,也就是说,字符串的长度 是双引号中所包括的字符个数加1。,5.数组的引用,数组必须先定义,后使用。只能逐个引用数组元素。引用形式: 一维 数组名下标; 二维 数组名下标1下标2; 如:a2=1; b01=5; /下标的值不要超过数组的范围 a3=a4+a5; ai+j;(i,j为整型变量),6. 指针变量,直接访问:按变量的地址直接对变量的值进行存取
7、。 如:存取整型变量a的值时,先找到a在内存中的位置即地址1000,然后从由地址1000地址的2字节中取出a的值6。间接访问:将变量的地址存放在另一个存储单元中,要访问某变量时,先访问存放该变量地址的存储单元,再间接地访问变量,对变量进行存取操作。 如:存取整型变量a的值时,可以将a的地址放在另一个内存单元中(如放在2010和2011中)。访问时,先找到存放a的地址的内存单元地址(2010、2011),从中取出a的地址(1000),然后从地址为1000,1001的2字节内存单元中取出a的值6。,6. 指针变量,指针就是地址,是一种数据类型。指针变量是专门用于存放地址的变量,它的值是指针。指针变量的定义形式: 类型说明符 * 指针变量名 如:int *ap; /定义指针变量ap float *p; /定义指针变量p 指针变量名前的“*”号代表该变量为指针变量。但指针名应是ap,p而不是*ap,*p。,6.指针变量,指针变量的赋值指针变量的赋值是通过取地址符“,6.指针变量,指针变量的引用可以通过指针运算符“*”引用指针变量,指针运算符可以理解“指向”的含义。 如:要将整型变量a的值赋给整型变量x, 若使用直接访问方式, 则用x=a; 若使用指针变量ap间接访问方式, 则用x=*ap;,数组的应用,花样广告灯数码管静态显示数码管动态显示复杂数学运算,如周期正弦值。,