从单片机基础到程序框架(全集 2019pdf版).pdf - 第335页

直接复制前 面章节中第十 一节的模板程 序, 练习代码时只需要 更改 “ C 语言学习区 域” 的 代码就可 以了, 其它 部分的 代码 不要动 。编 译后 ,把程 序下 载进带 串口 的 51 学 习板, 通过 电脑 端的串 口助 手软件 就可 以观 察到不同的 变量数值,详 细方法请看第 十一节 内容。

100%1 / 836
break;
case 2: //选择 2 个现有二维数
CopyBuffer(table_2,SaveBuffer); //二维指针在这里分别体现了输入和输出接口作
break;
case 3: //选择第 3 个现有二维数组
CopyBuffer(table_3,SaveBuffer); //二维指针在这里分别体现了输入和输出接口作
break;
}
View(SaveBuffer[0][0]); //在电脑端观察某个二维数组第 0 行数据第 0 个元素的内
View(SaveBuffer[0][1]); //在电脑端观察某个二维数组第 0 行数据第 1 个元素的内
View(SaveBuffer[0][2]); //在电脑端观察某个二维数组第 0 行数据第 2 个元素的内
while(1)
{
}
}
/*---C 语言学习区域的结束。-----------------------------------------------*/
在电脑串口助手软件上观察到的程序执行现象如下:
开始...
1 个数
十进制:160
十六进制:A0
二进制:10100000
2 个数
十进制:161
十六进制:A1
二进制:10100001
3 个数
十进制:162
十六进制:A2
二进制:10100010
分析:
SaveBuffer[0][0]是十六进制的 0xA0,提取了第 2 个二维数组的第 0 0 个数据。
SaveBuffer[0][1]是十六进制的 0xA1,提取了第 2 个二维数组的第 0 1 个数据。
SaveBuffer[0][2]是十六进制的 0xA2,提取了第 2 个二维数组的第 0 2 个数据。
【76.6 如何在单片机上练习本章节 C 语言程序?】
直接复制前面章节中第十一节的模板程序,练习代码时只需要更改C 语言学习区域”代码就可以了,
其它部分的代码不要动。编译后,把程序下载进带串口 51 习板,通过电脑端的串口助手软件就可以观
察到不同的变量数值,详细方法请看第十一节内容。
第七十七节: 指针唯一的“单向输出”通道 return。
【77.1 指针的“单向”输出通道。
函数的接口有两个地方,一个是函数名“后面”的小括号所包含的接口参数,另一个是函数名“前面”
通过函数内 return 返回出来的“return 返回类型”。比如:
return 返回类型 函数名(接口参数,接口参数...)
unsigned char HanShu(unsigned char a,unsigned char b) //a b 是函数名“后面”的接口参数
{
unsigned char c;
c=a+b;
return c; //函数内部返回出来的“return 返回类型
}
指针在“函数名后面小括号所包含的接口参数”的地方时,可以是一个“双向”口(输入和输
果在指针前面加上 const 关键字修饰,可以把“双向”改为只能输入的“单向”口,注意,这里所说的“单
向”是指“输入的单向”,但是做不到“输出的单向,指针如果想做到“输出的单向”,就必须通过 return
这个通道。return 返回指针这个功能很常用,比如用 32 位单片机想做比较漂亮的显示界面时,大家往往
欢用到 emWIN 这个界面显示系统, emWIN 提供了很多库函数,这些库函数用了很 return 返回的“句柄
“句柄”其实就是指针,比如类似以下这行代码
hItem = WM_GetDialogItem(hWin_FrameWin_GetClientWindow, ID_LISTVIEW_0); //获取某个控件的句柄
其中 hItem 就是“句柄”,本质就是函数内 return 返回出来的指针。
所以本节内容主要是想告诉大家,return 不仅可以返回普通的变量,也是可以返回指针的,而且还很常
用。具体内容请看下面 77.2 例子中的讲解。
【77.2 例程练习和分析。
编写一个函数,要从一个二维表格的数组中提取其中某一行的数据,用 return 个返回输出的通道来
接收该行数据的地址(指针),然后再通过这个指针的间接调用,把该行数据全部显示出来。
/*---C 语言学习区域的开始。-----------------------------------------------*/
unsigned char *GetRowData(unsigned char (*pu8Table)[3],unsigned char u8RowSec); //函数声明
unsigned char table[][3]= //二维数组
{
{0x00,0x01,0x02}, //二维数组的第 0 行数
{0x10,0x11,0x12}, //二维数组的第 1 行数