单片机C语言中数组的用法
数组是由具有相同类型的数据元素组成的有序集合。数组是由数组名来表示的,数组中的数据由特定的下标来唯一确定。引入数组的目的,是使用一块连续的内存空间存储多个类型相同的数据,以解决一批相关数据的存储问题。数组与普通变量一样,也必须先定义,后使用。数组在C51语言的地位举足轻重,因此深入地了解数组是很有必要的。下面就对数组进行详细的介绍。
(1)一维数组
一维数组是最简单的数组,用来存放类型相同的数据。数据的存放是线性连续的。
用以下例程说明数组的建立、数据操作:
#include
/*
-----------------------------------------------------
此程序用以说明数组的建立、数据操作
-----------------------------------------------------
*/
unsigned char array[10];//定义一个有10个单元的数组
void main()
{
unsigned char i;
for(i=0;i10;i++)
{
array[i]=i; //用下标调用数组中的元素
}
/*
---------------------------------------
array |9|8|7|6|5|4|3|2|1|0| [9]~[0]
---------------------------------------
*/
while(1);
}
数组名是用来表示数组的标识,其实它是数组的首地址,即一个指针。不过它所表示的地址是固定的,不能改动。如前几章所述的相关内容,array[2]与*(array+2)是等效的,不过不能用array++,因为array是常量。
上面的程序中的数组是静态建立的,以下例程来用说明数组的动态建立。
#include
#include
/*
-----------------------------------------------------
此程序用以说明数组的动态建立
-----------------------------------------------------
*/
unsigned char *parray;
void main()
{
unsigned char i;
parray=(unsigned char *)malloc(10); //动态创建一个数组
for(i=0;i10;i++)
{
parray[i]=i; //向数组中赋值
}
free(parray); //释放数组
while(1);
}
字符串是数组的一个重要特例。它的每个单元的数据均为字符类型(char),最后一个单元为''(0x00),用来表示字符串的结束。C51函数库中提供了专门对字符串进行处理的函数,用以下例程说明:
#include
#include
/*
-----------------------------------------------------
此程序用以说明字符串
-----------------------------------------------------
*/
char s[]={'y','a','h','o','o',''};
//定义一个字符串,并对它进行初始化,以''结束
void main()
{
char s_temp[10];
strcpy(s_temp,s);//strcpy位于string.h头文件中,实现字符拷贝
//s为一个常量,不能s++
strcpy(s_temp,yahoo);//与上面的语句等效
while(1);
}以下列出几种字符串的灵活用法,希望能够帮助读者深入了解字符串:
#include
#include
/*
-----------------------------------------------------
此程序用以说明字符串的灵活运用
-----------------------------------------------------
*/
/*
-----------------------------------------------------
此函数从字符串s中提取第n个子串,子串间由','分隔
返回指向该子串的指针
-----------------------------------------------------
*/
char *get_sub_string(char *s,unsigned char n)
{
int i;int d=0;int fore=0;
int len=strlen(s);
for(i=0;i
{
if(s[i]==',')
{
s[i]='';
d++;
if(d==n)
{
return s+fore;
}
else
{
fore=i+1;
}
}
}
return NULL;
}
void main()
{
unsigned char c;
char string[20];
c=yahoo[2]; //c='h'
/*正如前面所述,字符串是由字符串的首地址来表示的,
字符串yahoo其实就是它的首地址,那就可以这样来
取其中的某个字符:yahoo[2]*/
strcpy(string,123,234,345,456);
strcpy(string,get_sub_string(string,2));
while(1);
}
(2)二维数组
可由两个下标确定元素的数组就称为二维数组。其定义的一般形式为:
类型说明符数组名[常量表达式1][常量表达式2]
例如:int array[6][4];
定义了一个二维数组array,有6行4列,共24个元素。
两个方括号中的常量表达1与常量表达式2规定了数组的行数与列数,从而确定了数组中的元素个数。行下标从0开始,最大为5,共6行;列下标也从0开始,最大为3,共4列。数组中共有6X4=24个元素,具体如下表示:
array[0][0] | array[0][1] | array[0][2] | array[0][3] |
array[1][0] | array[1][1] | array[1][2] | array[1][3] |
array[2][0] | array[2][1] | array[2][2] | array[2][3] |
array[3][0] | array[3][1] | array[3][2] | array[3][3] |
array[4][0] | array[4][1] | array[4][2] | array[4][3] |
array[5][0] | array[5][1] | array[5][2] | array[5][3] |
实际使用时,可以把上述二维数组看作一个6行4列的矩阵,是一个平面的二维结构。那么编译程序是如何用一维
- 嵌入式C语言中const与volatile的用法详解(11-27)
- AVR的IO用法笔记(05-11)
- AVR定时器的用法要点介绍(08-10)
- 有名管道(FIFO)的用法(08-06)
- VC下使用复数示例(建议使用“用法一”)(07-05)
- 基于TMS320C62X DSP的混合编程研究(07-12)