![STM32单片机全案例开发实战](https://wfqqreader-1252317822.image.myqcloud.com/cover/636/47548636/b_47548636.jpg)
1.4.5 数组
数组也常称作表格,是指具有相同数据类型的数据集合。在定义数组时,程序会将一段连续的存储单元分配给数组,存储单元的最低地址存放数组的第一个元素,最高地址存放数组的最后一个元素。
根据维数不同,数组可分为一维数组、二维数组和多维数组;根据数据类型不同,数组可分为字符型数组、整型数组、浮点型数组和指针型数组。在用单片机C语言编程时,最常用的是字符型一维数组和整型一维数组。
1.一维数组
1)数组定义
一维数组的一般定义形式如下。
![](https://epubservercos.yuewen.com/8CF48F/26947311602607506/epubprivate/OEBPS/Images/44271_32_1.jpg?sign=1738960366-ZhzhBothXOIVyHQpzNPpYFoVOSEz9Rwk-0-1556eb3ee5733f09d3200a038e4b9275)
方括号(又称中括号)中的下标也称常量表达式,表示数组中的元素个数。
一维数组定义举例如下。
![](https://epubservercos.yuewen.com/8CF48F/26947311602607506/epubprivate/OEBPS/Images/44271_32_2.jpg?sign=1738960366-xkOApkkqqcyHWmbCgkcgcBjvA9Gcu3J4-0-c2bbe72a8b3f26c0829ace173dd959c8)
以上定义了一个无符号整型数组,数组名为a,数组中存放5个元素,元素类型均为整型,由于每个整型数据占2字节,故该数组占用了10字节的存储空间,该数组中的第1~5个元素分别用a[0]~a[4]表示。
2)数组赋值
在定义数组时,也可同时指定数组中的各个元素(即数组赋值),比如:
![](https://epubservercos.yuewen.com/8CF48F/26947311602607506/epubprivate/OEBPS/Images/44271_33_1.jpg?sign=1738960366-WafDQoxa4l23jCN4Kv5ukg27QcyMkTet-0-b5e1cb50e1b38ea21a97e27a4e73df87)
在数组a中,a[0]=2,a[4]=512;在数组b中,b[0]=2,b[4]=512,b[5]~b[7]均未赋值,全部自动填0。
在定义数组时,要注意以下几点。
(1)数组名应与变量名一样,必须遵循标识符命名规则,在同一个程序中,数组名不能与变量名相同。
(2)数组中的每个元素的数据类型必须相同,并且与数组类型一致。
(3)数组名后面的下标表示数组的元素个数(又称数组长度),必须用方括号括起来,下标是一个整型值,可以是常数或符号常量,不能包含变量。
2.二维数组
1)数组定义
二维数组的一般定义形式如下。
![](https://epubservercos.yuewen.com/8CF48F/26947311602607506/epubprivate/OEBPS/Images/44271_33_2.jpg?sign=1738960366-IYljvqIIS46IpEsULMKhu8GdrSfjhkB6-0-e65cb85896ee243db2565b24353cbc71)
下标1表示行数,下标2表示列数。
二维数组定义举例如下。
![](https://epubservercos.yuewen.com/8CF48F/26947311602607506/epubprivate/OEBPS/Images/44271_33_3.jpg?sign=1738960366-X19ccXaBac23SGGa98U98fsIBpUNWSRB-0-90464e781ff53fd369ab69e2b4113fac)
以上定义了一个无符号整型二维数组,数组名为a,数组为2行3列,共6个元素,这6个元素依次用a[0] [0]、a[0] [1]、a[0] [2]、a[1] [0]、a[1] [1]、a[1] [2]表示。
2)数组赋值
二维数组赋值有以下两种方法。
(1)按存储顺序赋值。例如:
![](https://epubservercos.yuewen.com/8CF48F/26947311602607506/epubprivate/OEBPS/Images/44271_33_4.jpg?sign=1738960366-iArNYcoZrEkSXapya2xHTXqaYxfHCROK-0-f92f0b6f9c1d4dcad25af0987820d3f6)
(2)按行分段赋值。例如:
![](https://epubservercos.yuewen.com/8CF48F/26947311602607506/epubprivate/OEBPS/Images/44271_33_5.jpg?sign=1738960366-qfP5R5QRisW9xYFe8V1aRJhG3jcDWVEq-0-b044349a75dd79ed6924d2ed3f366984)
3.字符型数组
字符型数组用来存储字符型数据。字符型数组可以在定义时进行初始化赋值。例如:
![](https://epubservercos.yuewen.com/8CF48F/26947311602607506/epubprivate/OEBPS/Images/44271_33_6.jpg?sign=1738960366-K4yh3ibB1hIui7hq5fEE2Dmrst9T96CO-0-8fdb5a88a952d181877aed2c2f42ca87)
以上定义了一个字符型数组,数组名为c,数组中存放4个字符型元素(占用4字节的存储空间),分别是A、B、C、D(实际上存放的是这4个字母的ASCII码,即0x41、0x42、0x43、0x44)。如果对全体元素赋值,数组的长度(下标)也可省略,即上述数组定义也可写成:
![](https://epubservercos.yuewen.com/8CF48F/26947311602607506/epubprivate/OEBPS/Images/44271_34_1.jpg?sign=1738960366-uwlonKatXXdT3m27jXZCGVrRkBu5AAz3-0-66abe40bda207267b2f0bdae5076154f)
如果要在字符型数组中存放一个字符串“good”,可采用以下3种方法。
![](https://epubservercos.yuewen.com/8CF48F/26947311602607506/epubprivate/OEBPS/Images/44271_34_2.jpg?sign=1738960366-gDGVslZlo18WYDdMSbvrx29IQjKI26D9-0-42934ce5b9011d8597b624594201ccf4)
当定义二维字符数组存放多个字符串时,二维字符数组的下标1为字符串的个数,下标2为每个字符串的长度,下标1可以不写,下标2则必须写,并且其值应较最长字符串的字符数(空格也算一个字符)至少多出一个。例如:
![](https://epubservercos.yuewen.com/8CF48F/26947311602607506/epubprivate/OEBPS/Images/44271_34_3.jpg?sign=1738960366-qrw0qBNNpXVmKL9GIc3ZSS0NGl87x6ft-0-619a8d3d7a5d509c4716e11af8f2e7c8)
例中“\n”是一种转义符号,其含义是换行,将当前位置移到下一行开头。