#今天的写作灵感还是来源于一直所学习的开发课程#
1.前言
在上篇博客中,提到了解耦的运用,即为了降低程序间的耦合性,我们不直接把想要循环的函数放入while死循环(原因:不便于维护,程序耦合性高),而是将它们一个个的注册放入我们构建的循环数组中,再在while死循环中循环执行我们数组,这样在大大降低了程序耦合性的前提下也实现了我们的目的
问题导入:根据上一节课的程序我们可以实现把想要循环的实体给注册进入循环数组,但是当我们需求改变不想要这部分实体进入循环,那我们如何便捷的仅用函数名字就实现对循环数组中的程序的卸载删除呢?显然上一篇博客的思想是无法实现这个需求的,由此我们开始本篇博客的序幕。
2.前期准备:结构体数组和函数声明
创建一个结构体数组,数组包含两种元素,一种为函数指针(上一篇博客提到过),一种为存储函数名称的数组
3.结构体初始化
将结构体种函数指针置空,存放函数名字的字符串数组全部初始化为0(即为空字符串)
4.注册循环函数修改
基于上篇博客的循环函数,我们对其进行修改,作用在于将我们想要的循环实体通过函数形参传递到函数指针(本质也为数组)中去。
知识补充:strncpy()函数是一个字符串复制函数,包含在头文件string.h中
char *strncpy(char *dest, const char *src, size_t n);
//dest 是指向目标数组(即要复制到的字符串)的指针。
//src 是指向源字符串的指针。
//n 是要复制的字符的最大数量。
//运用举例如下
strncpy(loopFunc[i].funcName,loopF.funcName, strlen(loopF.funcName));
//上述语句意思为复制长度为strlen(loopF.funcName)的字符串loopF.funcName到loopFunc[i].funcName
//即将loopF.funcName复制到loopFunc[i].funcName
5.卸载循环函数
将对应
知识补充:memset()函数是一个字符串复制函数,包含在头文件string.h中,用于将某块内存区域的前 n
个字节全部设置为指定的字符(实际上是该字符的 ASCII 值)
void *memset(void *s, int c, size_t n);
//s 是指向要填充的内存块的指针。
//c 是要设置的值,虽然参数类型是 int,但实际上只有低 8 位(即字节)被使用,并且被当作无符号字符(unsigned char)来处理。
//n 是要设置的字节数。
//应用举例如下
memset(loopFunc[i].funcName,0, sizeof (loopFunc[i].funcName));
//将字符串数组loopFunc[i].funcName初始化为0
6.主函数内调用注册循环函数
7.注册循环函数和卸载循环函数的运用
注册循环函数:将想要循环的实体放入循环数组中
卸载循环函数:将不想要循环的实体从循环数组中移除
知道上面两个函数的具体作用,然后结合自己的实际需求对两个函数进行调用封装,就能够达到自己解耦并且循环的需求了。