数组不过就是同一类型变量的有序集合。形象的能这样去理解,就像一个 学校在操场上排队,每一个级代表一个数据类型,每一个班级为一个数组,每一个学生就是 数组中的一个数据。数据中的每个数据都能用唯一的下标来确定其位置,下标能是一维 或多维的。就如在学校的方队中要找一个学生,这个学生在 I 年级 H 班 X 组 Y 号的,那么 能把这个学生看做在 I 类型的 H 数组中(X,Y)下标位置中。数组和普通变量一样,要
求先定义了才能使用,下面是定义一维或多维数组的方式:
“数据类型”是指数组中的各数据单元的类型,每个数组中的数据单元只能是同一数据
类型。“数组名”是整个数组的标识,命名方法和变量命名方法是一样的。在编译时系统会 根据数组大小和类型为变量分配空间,数组名能说就是所分配空间的首地址的标识。“常 量表达式”是表示数组的长度和维数,它必须用“[]”括起,括号里的数不能是变量只能是 常量。
unsigned int xcount [10]; //定义无符号整形数组,有 10 个数据单元
char inputstring [5]; //定义字符形数组,有 5 个数据单元
float outnum [10],[10];//定义浮点型数组,有 100 个数据单元
在 C 语言中数组的下标是从 0 开始的而不是从 1 开始,如一个具有 10 个数据单元的数
组 count,它的下标就是从 count[0]到 count[9],引用单个元素就是数组名加下标,如 count[1] 就是引用 count 数组中的第 2 个元素,如果错用了 count[10]就会有错误出现了。还有一点要 注意的就是在程序中只能逐个引用数组中的元素,不能一次引用整个数组,但是字符型的数 组就能一次引用整个数组。
数组也是能赋初值的。在上面介绍的定义方式只适用于定义在内存 DATA 存储器使 用的内存,有的时候我们需要把一些数据表存放在数组中,通常这些数据是不用在程序中改 变数值的,这个时候就要把这些数据在程序编写时就赋给数组变量。因为 51 芯片的片内 RAM 很有限,通常会把 RAM 分给参与运算的变量或数组,而那些程序中不变数据则应存放在片 内的 CODE 存储区,以节省宝贵的 RAM。赋初值的方式如下:
数据类型 [存储器类型] 数组名 [常量表达式] = {常量表达式};
数据类型 [ 存储器类型] 数组名 [ 常量表达式 1]...... [ 常量表达式 N]={ { 常量表达 式}...{常量表达式 N}};
在定义并为数组赋初值时,开始学习的朋友一般会搞错初值个数和数组长度的关系,而致使 编译出错。初值个数必须小于或等于数组长度,不指定数组长度则会在编译时由实际的初值 个数自动设置。
unsigned char LEDNUM[2]={12,35}; //一维数组赋初值
int Key[2][3]={ {1,2,4},{2,2,1}}; //二维数组赋初值
unsigned char IOStr[]={3,5,2,5,3}; //没有指定数组长度,编译器自动设置
unsigned char code skydata[]={0x02,0x34,0x22,0x32,0x21,0x12}; //数据保存在 code 区
下面的一个