单片机C语言中数组的用法
#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列的矩阵,是一个平面的二维结构。那么编译程序是如何用一维的存储空间给这样一个二维结构分配连续的存储单元的呢C51采用按行存放的方法,即在内存中先存放第0行元素,再存放第1行、第2行、......元素,每行中先存放第0列,接着存放第1列、第2列、......的元素。
#include
#include
/*
-----------------------------------------------------
此程序用以说明二维数组的使用方法
-----------------------------------------------------
*/
void main()
{
unsigned char arrays[3][3]={{1,2,3},{2,3,4},{3,4,5}};
//定义一个3行3列的二维数组,其它在内存中还是以一维的方式存储的
//用下面的方式就可以知道这一点
unsigned char test;
test=((unsigned char *)arrays)[6];//test=3;
//将二维数据的首地址强制转为一维数组,按照一维数组的方式访问它
while(1);
}
除了一维数组、二维数组,其实可以定义任何维的数组,多维数组用来表示由多个下标才能决定的量。
例如:int arrays[3][3][3]
表示数组arrays为一个三维数组,对应于三维存储模型。
其实单片机内的存储器是一维的,即所有数据都是依次顺序存储的,所以无论几维数组都由编译程序抽象出数组到单片机存储的实际的一维数组映射。
#include
/*
-----------------------------------------------------
此程序用以说明三维数组
-----------------------------------------------------
*/
void main()
{
unsigned char test;
unsigned char arrays[2][2][2]={{{1,2},{2,3}},{{3,4},{4,5}}};
test=arrays[1][1][0];//test=4
test=((unsigned char *)arrays)[7]; //test=5
while(1);
}
c语言相关文章:c语言教程
单片机相关文章:单片机教程
单片机相关文章:单片机视频教程
单片机相关文章:单片机工作原理
评论