从单片机基础到程序框架(全集 2019pdf版) - 第192页
十六进制:0 二进制:0 分析: 变量 a 为 2。 (2 代表 执行了语句 2) 变量 b 为 3。 (3 代表 执行了语句 3) 变量 c 为 0。 (0 代表 什么语句都没 执行) 【45.6 如何在单片机上练习本章节 C 语言程序?】 直接复制前 面章节中第十 一节的模板程 序, 练习代码时只需要 更改 “ C 语言学习区 域” 的 代码就可 以了, 其它 部分的 代码 不要动 。编 译后 ,把程 序下 载进带 串口 的 51 …

{
b=3; //3 代表执行了“语句 3”
}
//第三种“多选一或者什么都不选”
if(x>6)
{
c=1; //1 代表执行了“语句 1”
}
else if(7==x)
{
c=2; //2 代表执行了“语句 2”
}
else if(8==x)
{
c=3; //3 代表执行了“语句 3”
}
View(a); //把第 1 个数 a 发送到电脑端的串口助手软件上观察。
View(b); //把第 2 个数 b 发送到电脑端的串口助手软件上观察。
View(c); //把第 3 个数 c 发送到电脑端的串口助手软件上观察。
while(1)
{
}
}
/*---C 语言学习区域的结束。-----------------------------------------------*/
在电脑串口助手软件上观察到的程序执行现象如下:
开始...
第 1 个数
十进制:2
十六进制:2
二进制:10
第 2 个数
十进制:3
十六进制:3
二进制:11
第 3 个数
十进制:0

十六进制:0
二进制:0
分析:
变量 a 为 2。(2 代表执行了语句 2)
变量 b 为 3。(3 代表执行了语句 3)
变量 c 为 0。(0 代表什么语句都没执行)
【45.6 如何在单片机上练习本章节 C 语言程序?】
直接复制前面章节中第十一节的模板程序,练习代码时只需要更改“C 语言学习区域”的代码就可以了,
其它部分的代码不要动。编译后,把程序下载进带串口的 51 学习板,通过电脑端的串口助手软件就可以观
察到不同的变量数值,详细方法请看第十一节内容。

第四十六节: 一维数组。
【46.1 数组是什么?】
数组就是一堆变量或常量的集合。把一个数组里面某一个变量或者常量称为数组的元素,反过来也可以
这么说,元素的集合就是数组。数组的最大特点就是内部所有的元素的地址都是挨家挨户相连的,同花顺似
的,以第一个元素(下标是 0 的元素)为首地址,后来元素的地址挨个依次增大。首地址在 RAM 中的绝对地
址往往是编译器自动分配的,我们不用管,可以看成是随机的。多说一句,在某些单片机,也可以通过特定
的 C 语言关键词,强制要求编译器按我们的意愿,来分配到 RAM 中指定的某个绝对地址,这部分的内容这里
暂时不讲。继续刚才的话题,首地址就像是一个坐标原点,一旦被编译器确定下来它在 RAM 中的地址,那么
后面其它元素的地址都是在此基础上依次增大的,有规律的。正因为这个特点,数组在项目中往往起到缓存
的作用。比如,在通信的项目中,用来作为一串数据的接收缓存。在界面显示的项目中,某个 16x16 点阵汉
字的字模,需要一个内含 32 个元素的数组来作为缓存。在读写文件的项目中,也需要一个大数组来作为文
件内容的缓存。在某些涉及复杂算法的项目,以数组作为缓存,并且通过配合循环语句或者指针,就可以快
速批量的处理数据(循环语句和指针的相关知识后面章节会讲到)。总之,在项目应用中,数组无处不在。
数组分为一维数组,二维数组,三维数组。一维数组应用最广,二维数组其次,三维数组最少用。所以
本教程只讲一维数组和二维数组,本节先讲一维数组。
【46.2 一维数组的书写格式和特点。】
一维数组不带初始化时候的定义格式如下:
数据类型 数组名[数组元素总数 N];
数据类型是指 unsigned char,unsigned int,unsigned long 这类关键词;数组名就是由字母和数字组
合而成的字符串,遵循常用变量的命名规则;N 是数字,代表此数组内部有多少个元素。比如:
unsigned char x[3]; //这里的 3 是数组内部元素的总数,但不是下标。
上述这一行代码,就相当于一条语句定义了 3 个变量,这 3 个变量分别是 x[0],x[1],x[2],但是不存在
x[3]这个变量。这里,具体元素中括号内的“0,1,2”称为数组的下标,代表某个具体的元素。由此可见,
数组有“批量定义”的特点。同时也要发现,此数组定义的 N 是 3,代表内含 3 个元素变量,但是具体到某
个元素的时候,下标不是从 1 开始,而是从 0 开始,最后一个也不是 3 而是 2。可以这样描述,某个数组有
N 个元素,它具体元素的下标是从 0 开始,到 N-1 结束。那么问题来,如果一个数组明明最大只有 N 个元素,
但是我在操作某个具体的元素时,非要用下标 N 或者 N+1,也就是说,如果超过数组的范围的操作,会出现
什么问题?后果严重吗?答案是:会导致数组越界出现异常或者编译不通过,可能会破坏其它数据,后果是
严重的。因此大家使用数组的时候,要注意数组不能越界的问题。
刚刚讲了一维数组不带初始化的定义格式,现在接着讲带初始化的定义格式,如下:
数据类型 数组名[数组元素总数 N]={元素 0, 元素 1,…元素 N-1};
比如:
unsigned char y[3]={10,11,12};
此数组一行代码定义了 3 个变量,分别是 y[0], y[1], y[2]。而 y[0]初始化为 10,y[1]初始化为 11,
y[2]初始化为 12。
在程序中,操作数组某个变量元素时,下标可以是常量,比如 y[0],此时的 0 就是常量;下标也可以是
变量,比如 y[i],此时的 i 就是变量。再强调一次,作为下标的常量或者变量 i 的数值必须小于数组定义时
的元素个数,否则就会导致数组越界出现异常或者编译不通过。