数组

数组的定义

指存储一个固定大小的、类型相同的顺序集合。数组用来存储一组类型相同的变量。

数组的语法结构

数组定义语句的基本结构:

1
datatype arrayName[length];

各部分定义:

1
2
3
datatype    // 数据类型
arrayName // 数组名称
length // 数组长度,不能为变量

例:

1
char l602Dat[16];

定义与初始化数组的方法

方法1:

1
char unm[10]={0,1,2,3,4,5,6,7,8,9};

方法2:

1
char unm[]={0,1,2,3,4,5,6,7,8,9};

在单片机程序中还有最常见的一种定义,是keil特有的关键字,对数组进行了修饰。

例:char code str[7]=”LCD1602”;

加了code之后,变量存储到ROM FLASH中;若没有code,则变量存储到RAM中。

变量存储在ROM和RAM的区别:写入到ROM中的变量不可在程序运行过程中发生改变,而存放在RAM中的变量可以随着程序的运行不断改变。

由于单片机追求低成本、低功耗。而RAM相比于ROM更加昂贵,也更耗电。为了节约成本,降低耗电量,大多数时候会考虑将程序运行过程中不会发生变动的变量写入到ROM中。

在keil MDK(stm32)中,需要用const代替code。

在硬件层面上也很好理解,在单片机资源中,flash ROM是代码(code)所在的空间,而程序代码空间毋庸置疑是不可以随意更改的,将这部分变量存储到代码空间不仅提高了程序可读性还有节约成本和降低功耗的作用。

数组的赋值

1
2
char unm[10];
unm[5] = 15;

数组的存储结构

数组的存储结构

C语言多维数组定义与赋值

多维数组定义语句的语法结构:

1
dataType arrayName[length1][length2][length3]..;

各部分定义:

1
2
3
4
5
datatype    // 数据类型
arrayName // 数组名
length1 // 第一维下标的长度
length2 // 第二维下标的长度
length3 // 第三维下标的长度

三维数组实例:

1
unsigned char Dat2[2][3][4] = {{{1,2,3,4},{1,2,3,4},{1,2,3,4}},{{1,2,3,4},{1,2,3,4},{1,2,3,4}}};

总结

在n维数组unsigned char Data4[a_1][a_2][a_3]…[a_n]中,[a_1]是最高层的一维,[a_n]是最低层的一维。[a_n]的这一维度中仅有数字,而[a_1]的这一维中却包含着其他维度。