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

pu8Buffer[ 2]=pu8Buf fer[2]/2; pu8Buffer[ 3]=pu8Buf fer[3]/2; } 【67.2 例程练习和分析。 】 现在编一个 练习程序。 /*---C 语言学习区 域的开始。 ----- ----------- ---------- ----------- ---------- */ //函数 声明 void H alf(unsigned char *p u8Buffer); //全局 变…

100%1 / 836
第六十七节: 指针作为数组在函数中既“入口”又“出口”的作用。
【67.1 指针作为数组在函数中的“入口”和“出口”
前面分别讲了指针的入口和出口,很多初学者误以为指针是一个“单向”的通道,其实,如果指针前面
没有加 const 这个“紧箍咒”限定它的属性,指针是“双向”的,不是“单向”的,也就是说,指针是可以
同时具备“入口”和“出口”这两种属性的。现在讲一个程序例子,求一个数组(内含 4 元素)的每个元素
量的倍的整数就是 2带小比如 4 的整一半 2,7
的整数倍的一半是 3(不 3.5),代码如下
void Half(unsigned char *pu8Buffer) //“求一半”的函
{
unsigned char u8Data_0; //临时中间变
unsigned char u8Data_1; //临时中间变
unsigned char u8Data_2; //临时中间变
unsigned char u8Data_3; //临时中间变
//从指针这个“入口”里获取需要“被除以 2”的数据。
u8Data_0=pu8Buffer[0];
u8Data_1=pu8Buffer[1];
u8Data_2=pu8Buffer[2];
u8Data_3=pu8Buffer[3];
//求数据的整数倍的一半的算法
u8Data_0=u8Data_0/2;
u8Data_1=u8Data_1/2;
u8Data_2=u8Data_2/2;
u8Data_3=u8Data_3/2;
//最后,把计算所得的结果分别传输到指针这个“出口”
pu8Buffer[0]=u8Data_0;
pu8Buffer[1]=u8Data_1;
pu8Buffer[2]=u8Data_2;
pu8Buffer[3]=u8Data_3;
}
上述代码,为了突出“入口”和“出口,我刻意多增加了 u8Data_0,u8Data_1,u8Data_2,u8Data_3
4 个临时中间变量,其实, 4 个临时中间变量还可以省略的,此函数简化后的等效代码如下:
void Half(unsigned char *pu8Buffer) //“求一半”的函
{
pu8Buffer[0]=pu8Buffer[0]/2;
pu8Buffer[1]=pu8Buffer[1]/2;
pu8Buffer[2]=pu8Buffer[2]/2;
pu8Buffer[3]=pu8Buffer[3]/2;
}
【67.2 例程练习和分析。
现在编一个练习程序。
/*---C 语言学习区域的开始。-----------------------------------------------*/
//函数声明
void Half(unsigned char *pu8Buffer);
//全局变量定义
unsigned char Gu8Buffer[4]={4,7,16,25}; //需要“被除 2”的数组
//函数定义
void Half(unsigned char *pu8Buffer) //“求一半”的函
{
pu8Buffer[0]=pu8Buffer[0]/2;
pu8Buffer[1]=pu8Buffer[1]/2;
pu8Buffer[2]=pu8Buffer[2]/2;
pu8Buffer[3]=pu8Buffer[3]/2;
}
void main() //主函数
{
Half(&Gu8Buffer[0]); //计算数组的整数倍的一半。这里的“入口”和“出口”是“同一个通道
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 个数
十进制:2
十六进制:2
二进制:10
2 个数
十进制:3
十六进制:3
二进制:11
3 个数
十进制:8
十六进制:8
二进制:1000
4 个数
十进制:12
十六进制:C
二进制:1100
分析:
Gu8Buffer[0]为 2。
Gu8Buffer[1]为 3。
Gu8Buffer[2]为 8。
Gu8Buffer[3]为 12。
【67.3 如何在单片机上练习本章节 C 语言程序?】
直接复制前面章节中第十一节的模板程序,练习代码时只需要更改C 语言学习区域”代码就可以了,
其它部分的代码不要动。编译后,把程序下载进带串口 51 习板,通过电脑端的串口助手软件就可以观
察到不同的变量数值,详细方法请看第十一节内容。