3375|1

40

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

单片机的C语言中数组的用法 [复制链接]

[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
[size=#]#include



[size=#]void main()
[size=#]{
[size=#]unsigned char arrays[3][3]={{1,2,3},{2,3,4},{3,4,5}};
[size=#]//定义一个33列的二维数组,其它在内存中还是以一维的方式存储的
[size=#]//用下面的方式就可以知道这一点
[size=#]unsigned char test;
[size=#]test=((unsigned char *)arrays)[6];//test=3;
[size=#]//将二维数据的首地址强制转为一维数组,按照一维数组的方式访问它
[size=#]while(1);
}
[size=#]除了一维数组、二维数组,其实可以定义任何维的数组,多维数组用来表示由多个下标才能决定的量。
[size=#]例如:int arrays[3][3][3]
[size=#]表示数组arrays为一个三维数组,对应于三维存储模型。
[size=#]其实单片机内的存储器是一维的,即所有数据都是依次顺序存储的,所以无论几维数组都由编译程序抽象出数组到单片机存储的实际的一维数组映射。

[size=#]#include



[size=#]void main()
[size=#]{
[size=#]unsigned char test;
[size=#]unsigned char arrays[2][2][2]={{{1,2},{2,3}},{{3,4},{4,5}}};
[size=#]test=arrays[1][1][0];//test=4
[size=#]test=((unsigned char *)arrays)[7]; //test=5
[size=#]while(1);
[size=#]}
[size=#](3)结构数组
[size=#]多个结构变量也可以构成结构数组,其定义方法与定义结构变量完全相同。
[size=#]如下例:
[size=#]#include



[size=#]typedef struct
[size=#]{
[size=#]int a,b,c,d;
[size=#]} Stru;

[size=#]void main()
[size=#]{
[size=#]Stru stru[10]; //定义结构数组
[size=#]unsigned char i=0;
[size=#]for(;i<10;i++)
[size=#]{
[size=#]stru.a=i;
[size=#]stru.b=i;
[size=#]stru.c=i;
[size=#]stru.d=i;
[size=#]}
[size=#]while(1);
}
此帖出自单片机论坛

最新回复

啥~~  详情 回复 发表于 2010-3-12 10:57
点赞 关注
 

回复
举报

1673

帖子

0

TA的资源

五彩晶圆(中级)

沙发
 
啥~~
此帖出自单片机论坛
 
个人签名要把目标订的实现起来辛苦一点!
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表