曙海教育集团论坛开发语言培训专区C语言开发 → 单片机的C语言中数组的用法


  共有6884人关注过本帖树形打印

主题:单片机的C语言中数组的用法

美女呀,离线,留言给我吧!
wangxinxin
  1楼 个性首页 | 博客 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:青蜂侠 帖子:1393 积分:14038 威望:0 精华:0 注册:2010-11-12 11:08:23
单片机的C语言中数组的用法  发帖心情 Post By:2010-12-10 10:12:35

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

1)一维数组

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

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

[size=#]#include



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


[size=#]void main()

[size=#]{

[size=#]unsigned char i;

[size=#]for(i=0;i<10;i++)

[size=#]{

[size=#]array=i; //用下标调用数组中的元素

[size=#]}


[size=#]while(1);

[size=#]}

数组名是用来表示数组的标识,其实它是数组的首地址,即一个指针。不过它所表示的地址是固定的,不能改动。如前几章所述的相关内容,array[2]*(array+2)是等效的,不过不能用array++,因为array是常量。

上面[size=#]的程序中的数组是静态建立的,以下例程来用说明数组的动态建立。

[size=#]#include

[size=#]#include




[size=#]unsigned char *parray;


[size=#]void main()

[size=#]{

[size=#]unsigned char i;

[size=#]parray=(unsigned char *)malloc(10); //动态创建一个数组

[size=#]for(i=0;i<10;i++)

[size=#]{

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

[size=#]}

[size=#]free(parray); //释放数组

[size=#]while(1);

[size=#]}

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

[size=#]#include

[size=#]#include




[size=#]char s[]={'y','a','h','o','o','\0'};

[size=#]//定义一个字符串,并对它进行初始化,以'\0'结束


[size=#]void main()

[size=#]{

[size=#]char s_temp[10];

[size=#]strcpy(s_temp,s);//strcpy位于string.h头文件中,实现字符拷贝

[size=#]//s为一个常量,不能s++

[size=#]strcpy(s_temp,"yahoo");//与上面的语句等效

[size=#]while(1);

[size=#]}

[size=#]以下列出几种字符串的灵活用法,希望能够帮助读者深入了解字符串:

[size=#]#include

[size=#]#include





[size=#]char *get_sub_string(char *s,unsigned char n)

[size=#]{

[size=#]int i;int d=0;int fore=0;

[size=#]int len=strlen(s);

[size=#]for(i=0;i< FONT>

[size=#]{

[size=#]if(s==',')

[size=#]{

[size=#]s='\0';

[size=#]d++;

[size=#]if(d==n)

[size=#]{

[size=#]return s+fore;

[size=#]}

[size=#]else

[size=#]{

[size=#]fore=i+1;

[size=#]}

[size=#]}

[size=#]}

[size=#]return NULL;

[size=#]}


[size=#]void main()

[size=#]{

[size=#]unsigned char c;

[size=#]char string[20];

[size=#]c="yahoo"[2]; //c='h'


[size=#]strcpy(string,"123,234,345,456");

[size=#]strcpy(string,get_sub_string(string,2));

[size=#]while(1);

[size=#]}

[size=#](2)二维数组

[size=#]可由两个下标确定元素的数组就称为二维数组。其定义的一般形式为:

类型说明符 数组名[常量表达式1][常量表达式2]

例如:int array[6][4];

定义了一个二维数组array,有64列,共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]

实际使用时,可以把上述二维数组看作一个64列的矩阵,是一个平面的二维结构。那么编译程序是如何用一[size=#]维的存储空间给这样一个二维结构分配连续的存储单元的呢[size=#]C51采用按行存放的方法,即在内存中先存放第0行元素,再存放第1行、第2行、......元素,每行中先存放第0列,接着存放第1列、第2列、......的元素。

[size=#]#include

[siz=#]#include




[size=#]void main()

[size=#]{


支持(0中立(0反对(0单帖管理 | 引用 | 回复 回到顶部

返回版面帖子列表

单片机的C语言中数组的用法








签名