从单片机基础到程序框架(全集 2019pdf版).pdf - 第271页
break; case 3: //第 3 堆 pCu8=&Cu 8Memory_3[0 ]; //跟第 3 堆数 据“绑定”起来 。 break; } // for(i =0;i<3;i++) // 第 1 次出现 fo r 循环,用来实现“ 赋值” 的“搬运数据 ”的动作。 // { // Gu8Buffer[i ]=*pCu8++ ; //先把“数据 ”赋值给数组 ,然后 “指针所存的 地址”再自 加 1。 // } …

Gu8Buffer[i]=*pCu8++; //先把“数据”赋值给数组,然后“指针所存的地址”再自加 1。
}
分析:上述代码,等程序执行完 for 循环后,指针所存的地址还是 RAM 地址 4 吗?不是。因为它是变动
的,经过 for 循环,“指针所存的地址”自加 3 次后,此时“所存的 RAM 地址”从原来的 4 变成了 7。
第 2 种:“地址偏移法”:
pCu8=&Cu8Memory_2[0]; //假设赋值后,此时“指针所存的地址”是 RAM 的地址 4。
for(i=0;i<3;i++)
{
Gu8Buffer[i]=pCu8[i]; //这类是“偏移地址”的写法,i 在这里相当于指针的偏移地址。
}
分析:上述代码,等程序执行完 for 循环后,指针所存的地址还是 RAM 地址 4 吗?是的。因为它存的地
址是不变的,变的只是偏移地址 i。此时“指针所存的地址”就像“原点”一样具有“绝对地址”的“参考
点”的属性。
【61.5 例程练习和分析。】
现在编一个练习程序。
/*---C 语言学习区域的开始。-----------------------------------------------*/
code unsigned char Cu8Memory_1[3]={1,2,3}; //第 1 堆数据
code unsigned char Cu8Memory_2[3]={4,5,6}; //第 2 堆数据
code unsigned char Cu8Memory_3[3]={7,8,9}; //第 3 堆数据
unsigned char Gu8Sec=2; //选择的变量
unsigned char Gu8Buffer[3]; //根据变量来存放对应的某堆数据的数组
unsigned char i; //for 循环用到的变量 i
const unsigned char *pCu8; //引入一个指针作为“中间站”
void main() //主函数
{
switch(Gu8Sec) //根据此选择变量来切换到对应的操作上
{
case 1: //第 1 堆
pCu8=&Cu8Memory_1[0]; //跟第 1 堆数据“绑定”起来。
break;
case 2: //第 2 堆
pCu8=&Cu8Memory_2[0]; //跟第 2 堆数据“绑定”起来。

break;
case 3: //第 3 堆
pCu8=&Cu8Memory_3[0]; //跟第 3 堆数据“绑定”起来。
break;
}
// for(i=0;i<3;i++) //第 1 次出现 for 循环,用来实现“赋值”的“搬运数据”的动作。
// {
// Gu8Buffer[i]=*pCu8++; //先把“数据”赋值给数组,然后“指针所存的地址”再自加 1。
// }
for(i=0;i<3;i++) //第 1 次出现 for 循环,用来实现“赋值”的“搬运数据”的动作。
{
Gu8Buffer[i]=pCu8[i]; //这类是“偏移地址”的写法,i 在这里相当于指针的偏移地址。
}
View(Gu8Buffer[0]); //把第 1 个数 Gu8Buffer[0]发送到电脑端的串口助手软件上观察。
View(Gu8Buffer[1]); //把第 2 个数 Gu8Buffer[1]发送到电脑端的串口助手软件上观察。
View(Gu8Buffer[2]); //把第 3 个数 Gu8Buffer[2]发送到电脑端的串口助手软件上观察。
while(1)
{
}
}
/*---C 语言学习区域的结束。-----------------------------------------------*/
在电脑串口助手软件上观察到的程序执行现象如下:
开始...
第 1 个数
十进制:4
十六进制:4
二进制:100
第 2 个数
十进制:5
十六进制:5
二进制:101
第 3 个数
十进制:6
十六进制:6

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