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

c=0; d=0; e=0; //函数 的调用,实现 5 个变 量都“自加 1”的功能。加“ &”表示“ 传址”的方 式进入函数内 部。 Add_One( &a, //第 1 个接口参数 &b, //第 2 个接口参数 &c, //第 3 个接口参数 &d, //第 4 个接口参数 &e); //第 5 个接 口参数 } 第二种方式 :把 N 个全局变 量打包成 一个结构体, 以“结构体指…

100%1 / 836
几十个接口参数,那岂不是非常麻烦?库函数设计的成败与否,本来就在于接口的设计合不合理,结构
指针作为函数接口参数”在此场合就显得特别有价值使用了这种方法函数与全局变量之间,它们的关联
脉络再也不用隐藏起来,并且可以很清晰的表达清楚现在举一个例子比如有一个函数要实现把 5 个全
局变量“自加 1”的功能,分别使用两种接口参数来实现,例子如下
第一种方式:有多少个全局变量就开多少个接口参数。
//函数的声明
void Add_One( unsigned char *pu8Data_1, //第 1 个接口参数
unsigned char *pu8Data_2, //第 2 个接口参数
unsigned char *pu8Data_3, //第 3 个接口参数
unsigned char *pu8Data_4, //第 4 个接口参数
unsigned char *pu8Data_5); //第 5 个接口参数
//5 个全局变量的定义
unsigned char a;
unsigned char b;
unsigned char c;
unsigned char d;
unsigned char e;
//函数的定义
void Add_One( unsigned char *pu8Data_1, //第 1 个接口参数
unsigned char *pu8Data_2, //第 2 个接口参数
unsigned char *pu8Data_3, //第 3 个接口参数
unsigned char *pu8Data_4, //第 4 个接口参数
unsigned char *pu8Data_5) //第 5 个接口参数
{
*pu8Data_1=(*pu8Data_1)+1; //实现自加 1 的功能
*pu8Data_2=(*pu8Data_2)+1;
*pu8Data_3=(*pu8Data_3)+1;
*pu8Data_4=(*pu8Data_4)+1;
*pu8Data_5=(*pu8Data_5)+1;
}
void main()
{
//5 个全局变量都初始化 0
a=0;
b=0;
c=0;
d=0;
e=0;
//函数的调用,实现 5 个变量都“自加 1”的功能。加“&”表示“传址”的方式进入函数内部。
Add_One(&a, //第 1 个接口参数
&b, //第 2 个接口参数
&c, //第 3 个接口参数
&d, //第 4 个接口参数
&e); //第 5 个接口参数
}
第二种方式:把 N 个全局变量打包成一个结构体,以“结构体指针”的方式进入函数内部。
//函数的声明
void Add_One(struct StructMould *ptMould); //只有 1 个结构体指针,大大减少了接口参数。
//结构体的“造模”
struct StructMould
{
unsigned char a;
unsigned char b;
unsigned char c;
unsigned char d;
unsigned char e;
};
struct StructMould GtMould; //生成一个结构体变量,内部包含了 5 个全局变量 a,b,c,d,e。
//函数的定义
void Add_One(struct StructMould *ptMould) //只有 1 个结构体指针,大大减少了接口参数。
{
ptMould->a=ptMould->a+1; //实现“自加 1”的功能。
ptMould->b=ptMould->b+1;
ptMould->c=ptMould->c+1;
ptMould->d=ptMould->d+1;
ptMould->e=ptMould->e+1;
}
void main()
{
//5 个全局变量的结构体成员都初始化为 0
GtMould.a=0;
GtMould.b=0;
GtMould.c=0;
GtMould.d=0;
GtMould.e=0;
//函数的调用,实现 5 个变量都“自加 1”的功能。加“&”表示“传址”的方式进入函数内部。
Add_One(&GtMould); //只 1 个结构体指针,大大减少了接口参数。
}
【74.3 例程练习和分析。
现在编写一个“以结构体指针为函数接口参数”的练习程序
/*---C 语言学习区域的开始。-----------------------------------------------*/
//函数的声明
void Add_One(struct StructMould *ptMould); //只有 1 个结构体指针,大大减少了接口参数。
//结构体的“造模”
struct StructMould
{
unsigned char a;
unsigned char b;
unsigned char c;
unsigned char d;
unsigned char e;
};
struct StructMould GtMould; //生成一个结构体变量,内部包含了 5 个全局变量 a,b,c,d,e。
//函数的定义
void Add_One(struct StructMould *ptMould) //只有 1 个结构体指针,大大减少了接口参数。
{
ptMould->a=ptMould->a+1; //实现“自加 1”的功能。
ptMould->b=ptMould->b+1;
ptMould->c=ptMould->c+1;
ptMould->d=ptMould->d+1;
ptMould->e=ptMould->e+1;
}
void main() //主函
{
//5 个全局变量的结构体成员都初始化为 0
GtMould.a=0;
GtMould.b=0;