[ARM入门] 单片机C语言数组的详细实例程序应用介绍

[复制链接]
 楼主| 潜力变实力 发表于 2022-5-4 08:11 | 显示全部楼层 |阅读模式
数组是由具有相同类型的数据元素组成的有序集合。数组是由数组名来表示的,数组中的数据由特定的下标来唯一确定。引入数组的目的,是使用一块连续的内存空间存储多个类型相同的数据,以解决一批相关数据的存储问题。数组与普通变量一样,也必须先定义,后使用。数组在C51语言的地位举足轻重,因此深入地了解数组是很有必要的。下面就对数组进行详细的介绍。
[color=rgb(0, 66, 118) !important][/url]
  类型说明符 数组名[常量表达式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);
  }

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

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

本版积分规则

211

主题

1124

帖子

9

粉丝
快速回复 在线客服 返回列表 返回顶部