从单片机基础到程序框架(全集 2019pdf版).pdf - 第290页
/*---C 语言学习区 域的开始。 ----- ----------- ---------- ----------- ---------- */ //函数 声明 void T iQu(unsigned int u 16Data,unsig ned char *p u8Buffer); //全局 变量定义 unsigned c har Gu8B uffer[4]; / /存放提取结果 的数组 //函数 定义 void T iQu(uns…

第六十六节: 指针作为数组在函数中的出口作用。
【66.1 指针作为数组在函数中的出口。】
函数对外部调用者传递信息主要有三类渠道,第一类是全局变量,第二类是 return 返回值,第三类是
指针。之前讲指针对外传递信息的时候,只讲了单个变量的情况,现在重点讲讲数组的情况。要把一个四位
数的个,十,百,千位分别提取出来成为 4 个数,依次存放在一个包含 4 个字节的数组里,代码如下:
void TiQu(unsigned int u16Data,unsigned char *pu8Buffer) //“提取”函数
{
unsigned char u8Ge; //个位
unsigned char u8Shi; //十位
unsigned char u8Bai; //百位
unsigned char u8Qian; //千位
u8Ge=u16Data/1%10; //提取个位
u8Shi=u16Data/10%10; //提取十位
u8Bai=u16Data/100%10; //提取百位
u8Qian=u16Data/1000%10; //提取千位
//最后,把所提取的数分别传输到“指针”这个“出口通道”
pu8Buffer[0]=u8Ge;
pu8Buffer[1]=u8Shi;
pu8Buffer[2]=u8Bai;
pu8Buffer[3]=u8Qian;
}
上述代码,为了突出“出口通道”,我刻意多增加了 u8Ge、u8Shi、u8Bai、u8Qian 这 4 个局部变量,其
实,这 4 个局部变量还可以省略的,此函数简化后的等效代码如下:
void TiQu(unsigned int u16Data,unsigned char *pu8Buffer) //“提取”函数
{
pu8Buffer[0]=u16Data/1%10; //提取个位
pu8Buffer[1]=u16Data/10%10; //提取十位
pu8Buffer[2]=u16Data/100%10; //提取百位
pu8Buffer[3]=u16Data/1000%10; //提取千位
}
【66.2 例程练习和分析。】
现在编一个练习程序。

/*---C 语言学习区域的开始。-----------------------------------------------*/
//函数声明
void TiQu(unsigned int u16Data,unsigned char *pu8Buffer);
//全局变量定义
unsigned char Gu8Buffer[4]; //存放提取结果的数组
//函数定义
void TiQu(unsigned int u16Data,unsigned char *pu8Buffer) //“提取”函数
{
pu8Buffer[0]=u16Data/1%10; //提取个位
pu8Buffer[1]=u16Data/10%10; //提取十位
pu8Buffer[2]=u16Data/100%10; //提取百位
pu8Buffer[3]=u16Data/1000%10; //提取千位
}
void main() //主函数
{
TiQu(9876,&Gu8Buffer[0]); //把 9876 这个四位数分别提取 6、7、8、9 存放在数组 Gu8Buffer 里
View(Gu8Buffer[0]); //把第 1 个数 Gu8Buffer[0])发送到电脑端的串口助手软件上观察
View(Gu8Buffer[1]); //把第 2 个数 Gu8Buffer[1])发送到电脑端的串口助手软件上观察
View(Gu8Buffer[2]); //把第 3 个数 Gu8Buffer[2])发送到电脑端的串口助手软件上观察
View(Gu8Buffer[3]); //把第 4 个数 Gu8Buffer[3])发送到电脑端的串口助手软件上观察
while(1)
{
}
}
/*---C 语言学习区域的结束。-----------------------------------------------*/
在电脑串口助手软件上观察到的程序执行现象如下:
开始...
第 1 个数
十进制:6
十六进制:6
二进制:110
第 2 个数

十进制:7
十六进制:7
二进制:111
第 3 个数
十进制:8
十六进制:8
二进制:1000
第 4 个数
十进制:9
十六进制:9
二进制:1001
分析:
Gu8Buffer[0]为 6。
Gu8Buffer[1]为 7。
Gu8Buffer[2]为 8。
Gu8Buffer[3]为 9。
【66.3 如何在单片机上练习本章节 C 语言程序?】
直接复制前面章节中第十一节的模板程序,练习代码时只需要更改“C 语言学习区域”的代码就可以了,
其它部分的代码不要动。编译后,把程序下载进带串口的 51 学习板,通过电脑端的串口助手软件就可以观
察到不同的变量数值,详细方法请看第十一节内容。