从单片机基础到程序框架(全集 2019pdf版).pdf - 第327页
} 【75.5 注意指针或者数组越界的问题。 】 上述例子中 , 二维数组内部只有 9 个数 据, 如果指针操作的数据超 过了这 9 个数 据的地址范围 , 就会导 致系统其它 无辜的数据 受到破坏, 这个问题导致的后 果是很严重 的, 这类指针或者数组越界 的问题 , 大 家平 时做项目时 必须留心注意 。 【75.6 例程练习和分析。 】 现在编写一 个练习程序。 /*---C 语言学习区 域的开始。 ----- ---------…

for(i=0;i<3;i++)
{
Gu8Buffer[i]=pGu8[i]; //提取二维数组的第 2 行数据,存入到一个一维数组里。
}
while(1)
{
}
}
【75.4 在函数接口中的类型转换。】
在函数接口中,也可以利用类型强制转换来实现函数接口的匹配问题,比如,下面这个写法也是合法的。
void GetRowData(unsigned char *pu8); //函数的声明
unsigned char table[][3]= //二维数组
{
{0x00,0x01,0x02}, //二维数组的第 0 行数据
{0x10,0x11,0x12}, //二维数组的第 1 行数据
{0x20,0x21,0x22}, //二维数组的第 2 行数据
};
unsigned char Gu8Buffer[3]; //一维数组,存放从二维数组里提取出来的某一行数据
void GetRowData(unsigned char *pu8) //一维指针的函数接口
{
unsigned char i; // for 循环的变量
for(i=0;i<3;i++)
{
Gu8Buffer[i]=pu8[i]; //提取二维数组的某行数据,存入到一个一维数组里。
}
}
void main()
{
GetRowData((unsigned char *)&table[2][0]); //利用类型强制转换来兼容一维指针的函数接口
while(1)
{
}

}
【75.5 注意指针或者数组越界的问题。】
上述例子中,二维数组内部只有 9 个数据,如果指针操作的数据超过了这 9 个数据的地址范围,就会导
致系统其它无辜的数据受到破坏,这个问题导致的后果是很严重的,这类指针或者数组越界的问题,大家平
时做项目时必须留心注意。
【75.6 例程练习和分析。】
现在编写一个练习程序。
/*---C 语言学习区域的开始。-----------------------------------------------*/
void GetRowData(unsigned char *pu8); //函数的声明
unsigned char table[][3]= //二维数组
{
{0x00,0x01,0x02}, //二维数组的第 0 行数据
{0x10,0x11,0x12}, //二维数组的第 1 行数据
{0x20,0x21,0x22}, //二维数组的第 2 行数据
};
unsigned char Gu8Buffer[3]; //一维数组,存放从二维数组里提取出来的某一行数据
void GetRowData(unsigned char *pu8) //一维指针的函数接口
{
unsigned char i; // for 循环的变量
for(i=0;i<3;i++)
{
Gu8Buffer[i]=pu8[i]; //提取二维数组的某行数据,存入到一个一维数组里。
}
}
void main() //主函数
{
GetRowData((unsigned char *)&table[2][0]); //利用类型强制转换来兼容一维指针的函数接口
View(Gu8Buffer[0]); //在电脑端观察存放二维数组某行数据的一维数组的内容
View(Gu8Buffer[1]); //在电脑端观察存放二维数组某行数据的一维数组的内容
View(Gu8Buffer[2]); //在电脑端观察存放二维数组某行数据的一维数组的内容
while(1)

{
}
}
/*---C 语言学习区域的结束。-----------------------------------------------*/
在电脑串口助手软件上观察到的程序执行现象如下:
开始...
第 1 个数
十进制:32
十六进制:20
二进制:100000
第 2 个数
十进制:33
十六进制:21
二进制:100001
第 3 个数
十进制:34
十六进制:22
二进制:100010
分析:
Gu8Buffer[0]是十六进制的 0x20,提取了二维数组第 2 行中的某数据。
Gu8Buffer[1]是十六进制的 0x21,提取了二维数组第 2 行中的某数据。
Gu8Buffer[2]是十六进制的 0x22,提取了二维数组第 2 行中的某数据。
【75.7 如何在单片机上练习本章节 C 语言程序?】
直接复制前面章节中第十一节的模板程序,练习代码时只需要更改“C 语言学习区域”的代码就可以了,
其它部分的代码不要动。编译后,把程序下载进带串口的 51 学习板,通过电脑端的串口助手软件就可以观
察到不同的变量数值,详细方法请看第十一节内容。