独闷闷网
标题:
跟大家分享单片机C语言中二维数组和二维指针的应用。
[打印本页]
作者:
jianhong_wu
时间:
2015-6-21 09:36
标题:
跟大家分享单片机C语言中二维数组和二维指针的应用。
本帖最后由 jianhong_wu 于 2015-6-21 09:40 编辑
★坚鸿-深圳:
二维数组在做一些跟字符串或者汉字表格有关的程序时很有用。当你有不同的表格时,你需要编写一个函数根据某个变量来切换选择不同的表格,你就需要一个与之配套的二维指针作为临时中转站,在各个表格之间进行选择切换。下面跟大家分享的内容,大家重点关注一下二维数组和指针的书写格式。
有3个表格:
code unsigned char number_table[][4]=
{
{0x01,0x02,0x03,0x04,},
{0x05,0x06,0x07,0x08,},
};
code unsigned char string_table[][4]=
{
"abcd",
"efgh",
};
code unsigned char hanzi_table[][4]=
{
"坚鸿", //每个汉子占2个字节的汉子机内码,所以一共4个字节
"你好",
};
复制代码
我用一个函数进行这三个表格的切换,中间用了一个二维数组的指针作为中转站。
void select_talbe(unsigned char ucTableSec)
{
unsigned char i;
unsigned char j;
unsigned char a;
const unsigned char (*pTable)[4]; //中转站二维数组指针,请注意它的书写格式 (*pTable)[8]。至于前缀要不要加const只是需不需要限定只读功能而已。
switch(ucTableSec)
{
case 1:
pTable=number_table; //建立指针与特定数组之间的关系
break;
case 2:
pTable=string_table; //建立指针与特定数组之间的关系
break;
case 3:
pTable=hanzi_table; //建立指针与特定数组之间的关系
break;
}
for(i=0;i<2;i++)
{
for(j=0;j<4;j++)
{
a=pTable[i][j]; //像数组一样调用二维指针。
show(a); //一个处理字节的函数,本例子没有把它的定义部分写出来.
}
}
}
复制代码
唯一遗憾的地方:
二维数组与指针匹配,必须要列数一致,比如上述例子(*pTable)[4]的4与表格列数对应的4,当然我测试了一下,在keil的C51平台即使不匹配也能编译通过,但是在IAR针对stm8单片机的编译器,如果不匹配则编译不能通过。它不像一维数组和指针,不需要限定列数。
欢迎光临 独闷闷网 (http://dumenmen.com/)
Powered by Discuz! X3.2