一、数组的基本概念
从概念上讲,数组是具有相同数据类型的有序数据的组合,一般来讲,数组定义后应满足:①具有相同的数据类型;②具有相同的名字;③在存储器中是被连续存放的。
比如数码管真值表,如果把关键字code去掉,数组元素将被保存在RAM中,在程序中可读可写,同时也可以在中括号里面标明这个数组所包含的元素个数,比如:
unsigned char LedChar[16] = {
0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E
};
在这个数组中的每个值都称为数组的一个元素,这些元素都具备相同的数据类型就是unsigned char型,它们还有一个共同的名字LedChar,不管放到RAM中还是FLASH中,它们都是存放在一块连续的存储空间里的。
但有一点需要特别注意,这个数组一共有16(中括号中的数值)个元素,但数组的单个元素的表达方式是:下标是从0开始,因此实际上上面这个数组的首个元素LedChar [0]的值是0xC0,而LedChar [15]的值是0x8E,下标的范围是0~15,共表示16个元素。
数组LedChar只有一个下标,称之为一维数组,还有两个下标和多个下标的,称之为二维数组和多维数组。比如“unsigned char a [2][3];”表示这是一个2行3列的二维数组。
二、char数组存储数据的形式
在单片机中,char数组中的数据是以字节(byte)的方式存储的。char类型表示一个字节的数据,即8位(8 bits)。在C语言中,char类型是用来表示字符的,但是它也可以用来存储其他8位的数据。char数组可以用来存储一串字符或者一串字节数据。例如,如果定义了一个char数组`char myArray[4] = { 'A', 'B', 'C', 'D' };`,则在内存中存储为'65'(对应字符'A'的ASCII码)、'66'('B'的ASCII码)、'67'('C'的ASCII码)和'68'('D'的ASCII码)四个字节。
数组中的每个元素都有一个索引,索引从0开始,依次递增。通过索引访问数组元素,可以读取或者修改存储在数组中的数据。需要注意的是,char数组中的数据存储顺序与数组的声明顺序一致。上述示例中的数组是顺序存储的,即'65'、'66'、'67'和'68'依次存储在myArray[0]、myArray[1]、myArray[2]和myArray[3]中。如果需要改变数据的存储顺序,可以通过操作数组的索引进行调整。
总之,char数组中的数据以字节的形式存储,每个元素占用一个字节,存储顺序与数组的声明顺序一致。
三、常见错误及解决方法
常见错误:'DATA': SEGMENT TOO LARGE;
解决方法:在数组变量前面加上关键字“code”
当遇到'DATA': SEGMENT TOO LARGE的错误时,通常是因为你在内部数据存储器中定义了太大的数组。如果你在定义的数组变量前加上code关键字,编译器会把这个变量当作位于程序存储器(Flash Memory)的变量,而不是位于内部数据存储器(SRAM)的变量。