0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

单片机C语言数组的详细实例程序应用介绍

Wildesbeast 来源:未知 2019-10-13 11:48 次阅读

数组是由具有相同类型的数据元素组成的有序集合。数组是由数组名来表示的,数组中的数据由特定的下标来唯一确定。引入数组的目的,是使用一块连续的内存空间存储多个类型相同的数据,以解决一批相关数据的存储问题。数组与普通变量一样,也必须先定义,后使用。数组在C51语言的地位举足轻重,因此深入地了解数组是很有必要的。下面就对数组进行详细的介绍。

(1)一维数组

一维数组是最简单的数组,用来存放类型相同的数据。数据的存放是线性连续的。

用以下例程说明数组的建立、数据操作:

#include

/*

-----------------------------------------------------

此程序用以说明数组的建立、数据操作

-----------------------------------------------------

*/

unsigned char array[10];//定义一个有10个单元的数组

void main()

{

unsigned char i;

for(i=0;i《10;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;i《10;i++)

{

parray[i]=i; //向数组中赋值

}

free(parray); //释放数组

while(1);

}

字符串是数组的一个重要特例。它的每个单元的数据均为字符类型(char),最后一个单元为‘\0’(0x00),用来表示字符串的结束。C51函数库中提供了专门对字符串进行处理的函数,用以下例程说明:

#include

#include

/*

-----------------------------------------------------

此程序用以说明字符串

-----------------------------------------------------

*/

char s[]={‘y’,‘a’,‘h’,‘o’,‘o’,‘\0’};

//定义一个字符串,并对它进行初始化,以‘\0’结束

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]=‘\0’;

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个元素,具体如下表示:

实际使用时,可以把上述二维数组看作一个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);

}

(3)结构数组

多个结构变量也可以构成结构数组,其定义方法与定义结构变量完全相同。

如下例:

#include

/*

-----------------------------------------------------

此程序用以说明结构数组

-----------------------------------------------------

*/

typedef struct

{

int a,b,c,d;

} Stru;

void main()

{

Stru stru[10]; //定义结构数组

unsigned char i=0;

for(;i《10;i++)

{

stru[i].a=i;

stru[i].b=i;

stru[i].c=i;

stru[i].d=i;

}

while(1);

}

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6029

    文章

    44480

    浏览量

    631602
  • C语言
    +关注

    关注

    180

    文章

    7588

    浏览量

    135740
  • 数组
    +关注

    关注

    1

    文章

    412

    浏览量

    25873
收藏 人收藏

    评论

    相关推荐

    51单片机及其C语言程序开发实例

    51单片机及其C语言程序开发实例:很详细,很全面的电子书实例
    发表于 01-03 17:25 255次下载

    AVR单片机C语言实例程序

    AVR单片机C语言实例程序,有需要的下来看看
    发表于 07-12 15:29 41次下载

    使用PIC单片机进行汇编语言的学习资料和实例程序免费下载

    本文档的主要内容详细介绍的是使用PIC单片机进行汇编语言的学习资料和实例程序免费下载。
    发表于 08-13 17:33 33次下载
    使用PIC<b class='flag-5'>单片机</b>进行汇编<b class='flag-5'>语言</b>的学习资料和<b class='flag-5'>实例程序</b>免费下载

    NEC单片机C编译中SREG的应用实例程序说明

    本文档的主要内容详细介绍的是NEC单片机C编译中SREG的应用实例程序说明。
    发表于 08-01 17:34 0次下载
    NEC<b class='flag-5'>单片机</b><b class='flag-5'>C</b>编译中SREG的应用<b class='flag-5'>实例程序</b>说明

    秦龙MSP430单片机C语言应用程序设计实例精解的实例程序免费下载

    本文档的主要内容详细介绍的是秦龙MSP430单片机C语言应用程序设计
    发表于 09-01 08:00 36次下载
    秦龙MSP430<b class='flag-5'>单片机</b><b class='flag-5'>C</b><b class='flag-5'>语言</b>应用<b class='flag-5'>程序</b>设计<b class='flag-5'>实例</b>精解的<b class='flag-5'>实例程序</b>免费下载

    使用单片机C语言实现消防车警报的实例程序和工程文件免费下载

    本文档的主要内容详细介绍的是使用单片机C语言实现消防车警报的实例程序和工程文件免费下载。
    发表于 02-02 10:48 17次下载

    使用单片机C语言实现步进电机转动原理的实例程序和工程文件免费下载

    本文档的主要内容详细介绍的是使用单片机C语言实现步进电机转动原理的实例程序和工程文件免费下载。
    发表于 02-02 10:48 8次下载

    使用单片机实现报警发声的C语言实例程序免费下载

    本文档的主要内容详细介绍的是使用单片机实现报警发声的C语言实例程序免费下载。
    发表于 03-02 11:34 10次下载

    使用单片机实现步进电机转速数码管显示的C语言实例程序免费下载

    本文档的主要内容详细介绍的是使用单片机实现步进电机转速数码管显示的C语言实例程序免费下载。
    发表于 03-02 11:34 11次下载

    使用单片机实现步进电机按键控制的C语言实例程序免费下载

    本文档的主要内容详细介绍的是使用单片机实现步进电机按键控制的C语言实例程序免费下载。
    发表于 03-02 11:33 17次下载

    实现PC单片机双向通信的C语言程序设计实例免费下载

    本文档的主要内容详细介绍的是使用单片机实现PC单片机双向通信的C
    发表于 03-30 15:52 25次下载

    使用单片机实现ADC0832模数转换与LCD显示的C语言实例程序免费下载

    本文档的主要内容详细介绍的是使用单片机实现ADC0832模数转换与LCD显示的C语言实例程序免费下载。
    发表于 03-30 16:49 56次下载

    使用单片机实现单片机内置EEPROM读写测试的C语言实例程序免费下载

    本文档的主要内容详细介绍的是使用单片机实现单片机内置EEPROM读写测试的C语言实例程序免费下载
    发表于 03-30 16:48 17次下载

    使用单片机实现温室监控系统仿真设计的C语言实例程序免费下载

    本文档的主要内容详细介绍的是使用单片机实现温室监控系统仿真设计的C语言实例程序免费下载。
    发表于 03-30 16:48 10次下载

    使用单片机和DAC0832生成锯齿波的C语言实例程序免费下载

    本文档的主要内容详细介绍的是使用单片机和DAC0832生成锯齿波的C语言实例程序免费下载。
    发表于 03-30 16:48 26次下载