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

第七十七节: 指针唯一的“单向输出”通道 return。 【77.1 指针的“单向”输出通道。 】 函数的接口 有两个地方, 一个是函数名 “后面 ”的小括号所 包含的接口参 数,另一个是 函数名 “前面” 通过函数内 部 r eturn 返回 出来的“re turn 返回类型” 。比如: return 返回 类型 函数名(接口 参数,接口参 数...) unsigned c har HanS hu(unsign ed char a,u…

100%1 / 836
直接复制前面章节中第十一节的模板程序,练习代码时只需要更改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 行数
{0x20,0x21,0x22}, //二维数组的第 2 行数
};
//函数名前面 unsigned char *,代表内部 return 返回的是 unsigned char *的指针。
unsigned char *GetRowData(unsigned char (*pu8Table)[3],unsigned char u8RowSec)
{
unsigned char *pu8Row;
pu8Row=(unsigned char *)&pu8Table[u8RowSec][0]; //提取某一行开始的地址(指针)
return pu8Row; //经过 return 通道对外输出指针,pu8Row 是一个指针类型的变量
}
unsigned char *pGu8Row; //接收 return 输出的指针
unsigned char Gu8Buffer[3]; //一维数组,存放从二维数组里提取出来的某一行数据
unsigned char i; // for 循环的变量
void main() //主函数
{
pGu8Row=GetRowData(table,0);//这里的 0 是表示选择二维表格的第 0 行数
for(i=0;i<3;i++)
{
Gu8Buffer[i]=pGu8Row[i]; //通过指针 pGu8Row 来搬运数据到一维数组 Gu8Buffer
}
View(Gu8Buffer[0]); //在电脑端观察存放二维数组某行数据的一维数组的内容
View(Gu8Buffer[1]); //在电脑端观察存放二维数组某行数据的一维数组的内容
View(Gu8Buffer[2]); //在电脑端观察存放二维数组某行数据的一维数组的内容
while(1)
{
}
}
/*---C 语言学习区域的结束。-----------------------------------------------*/
在电脑串口助手软件上观察到的程序执行现象如下:
开始...
1 个数
十进制:0
十六进制:0
二进制:0
2 个数
十进制:1
十六进制:1