独闷闷网

 找回密码
 立即注册
搜索
查看: 5392|回复: 0
打印 上一主题 下一主题
收起左侧

[原创] 跟大家分享单片机C语言中二维数组和二维指针的应用。

[复制链接]
跳转到指定楼层
楼主
发表于 2015-6-21 09:36:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

x
本帖最后由 jianhong_wu 于 2015-6-21 09:40 编辑

★坚鸿-深圳:
       二维数组在做一些跟字符串或者汉字表格有关的程序时很有用。当你有不同的表格时,你需要编写一个函数根据某个变量来切换选择不同的表格,你就需要一个与之配套的二维指针作为临时中转站,在各个表格之间进行选择切换。下面跟大家分享的内容,大家重点关注一下二维数组和指针的书写格式。
      有3个表格:
  1. code unsigned char number_table[][4]=
  2. {
  3. {0x01,0x02,0x03,0x04,},
  4. {0x05,0x06,0x07,0x08,},
  5. };

  6. code unsigned char string_table[][4]=
  7. {
  8. "abcd",
  9. "efgh",
  10. };

  11. code unsigned char hanzi_table[][4]=
  12. {
  13. "坚鸿",  //每个汉子占2个字节的汉子机内码,所以一共4个字节
  14. "你好",
  15. };
复制代码

       我用一个函数进行这三个表格的切换,中间用了一个二维数组的指针作为中转站。

  1. void select_talbe(unsigned char ucTableSec)
  2. {
  3.         
  4.          unsigned char i;
  5.          unsigned char j;
  6.          unsigned char a;
  7.    const unsigned char (*pTable)[4]; //中转站二维数组指针,请注意它的书写格式 (*pTable)[8]。至于前缀要不要加const只是需不需要限定只读功能而已。
  8.          switch(ucTableSec)
  9.          {
  10.       case 1:
  11.                                   pTable=number_table;   //建立指针与特定数组之间的关系
  12.                             break;
  13.       case 2:
  14.                                   pTable=string_table;  //建立指针与特定数组之间的关系
  15.                             break;
  16.       case 3:
  17.                                   pTable=hanzi_table;   //建立指针与特定数组之间的关系
  18.                             break;
  19.    }
  20.          
  21.          for(i=0;i<2;i++)
  22.          {
  23.             for(j=0;j<4;j++)
  24.             {
  25.                  a=pTable[i][j];   //像数组一样调用二维指针。
  26.                                  show(a);  //一个处理字节的函数,本例子没有把它的定义部分写出来.
  27.       }
  28.          
  29.    }
  30.          
  31.         
  32. }
复制代码


        唯一遗憾的地方:二维数组与指针匹配,必须要列数一致,比如上述例子(*pTable)[4]的4与表格列数对应的4,当然我测试了一下,在keil的C51平台即使不匹配也能编译通过,但是在IAR针对stm8单片机的编译器,如果不匹配则编译不能通过。它不像一维数组和指针,不需要限定列数。


乐于分享,勇于质疑!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|独闷闷网 ( 粤ICP备12007667号-2 )

GMT+8, 2024-4-24 14:09 , Processed in 0.145990 second(s), 17 queries .

快速回复 返回顶部 返回列表