从单片机基础到程序框架(全集 2019pdf版) - 第282页
第六十四节: 指针让函数具备了多个相当于 return 的输出口。 【64.1 函数的三类输出渠道。 】 函数是模块 , 模块必须具备输入和输 出的接口 , 从输 入和输 出的角度分 析, 函数对外部调用者传递 信息 主要 有三类 渠道 ,第 一类是 全局 变量 ,第二 类是 re turn 返 回值 ,第三 类是 用指 针。全 局变 量太 隐蔽, 没有 那么直观, 可读 性稍差。 re turn 可读性强 , 缺点是一个 函数的 r …

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

第六十四节: 指针让函数具备了多个相当于 return 的输出口。
【64.1 函数的三类输出渠道。】
函数是模块,模块必须具备输入和输出的接口,从输入和输出的角度分析,函数对外部调用者传递信息
主要有三类渠道,第一类是全局变量,第二类是 return 返回值,第三类是用指针。全局变量太隐蔽,没有
那么直观,可读性稍差。return 可读性强,缺点是一个函数的 return 只能算一个数据的“出口”,如果一个
函数要输出多个结果,return 就力不从心。指针作为函数的输出接口,就能随心所欲了,不但可读性强,而
且输出的接口数量不受限制。
【64.2 只有一个输出接口的时候。】
现在举一个例子,要用函数实现一个加法运算,输出“一个”加法运算的和,求 3 加上 5 等于 8。下面
三个例子中分别使用“全局变量,return,指针”这三类输出接口。
第一类:全局变量。
unsigned char DiaoYongZhe; //调用者
unsigned char BeiJiaShu; //被加数
unsigned char JiaShu; //加数
unsigned char He; //输出的接口,加法运算的"和"。
void JiaFa(void)
{
He=BeiJiaShu+JiaShu;
}
void main()
{
BeiJiaShu=3; //填入被加数 3
JiaShu=5; //填入加数 5
JiaFa(); //调用一次加法运算的函数
DiaoYongZhe=He; //把加法运算的“和”赋值给调用者。
}
第二类:return。
unsigned char DiaoYongZhe; //调用者
unsigned char JiaFa(unsigned char BeiJiaShu,unsigned char JiaShu)
{
unsigned char He;
He=BeiJiaShu+JiaShu;
return He;
}

void main()
{
DiaoYongZhe=JiaFa(3,5); //把加法运算的“和”赋值给调用者,一气呵成。
}
第三类:指针。
unsigned char DiaoYongZhe; //调用者
void char JiaFa(unsigned char BeiJiaShu,unsigned char JiaShu,unsigned char *pu8He)
{
*pu8He=BeiJiaShu+JiaShu;
}
void main()
{
JiaFa(3,5,&DiaoYongZhe); //通过指针这个输出渠道,把加法运算的“和”赋值给调用者,一气呵成。
}
【64.3 有多个输出接口的时候。】
现在举一个例子,要用函数实现一个除法运算,分别输出除法运算的商和余数这“两个”数,求 5 除以
3 等于 1 余 2。因为 return 只能输出一个结果,所以这里不列举 return 的例子,只使用“全局变量”和“指
针”这两类输出接口。
第一类:全局变量。
unsigned char DiaoYongZhe_Shang; //调用者的商
unsigned char DiaoYongZhe_Yu; //调用者的余数
unsigned char BeiChuShu; //被除数
unsigned char ChuShu; //除数
unsigned char Shang; //输出的接口,除法运算的"商"。
unsigned char Yu; //输出的接口,除法运算的"余"。
void ChuFa(void)
{
Shang=BeiChuShu/ChuShu; //求商。假设除数不会为 0 的情况。
Yu=BeiChuShu%ChuShu; //求余数。假设除数不会为 0 的情况。
}
void main()
{
BeiChuShu=5; //填入被除数 5
ChuShu=3; //填入除数 3