思路导图 通讯录的构建 精修前置声明

张开发
2026/4/9 18:55:08 15 分钟阅读

分享文章

思路导图 通讯录的构建 精修前置声明
0.类似 int 一样将联系人信息抽象为一个结构体类型再用typedef重命名类型名方便复用顺序表的函数和方法 是基于顺序表的开发和应用1 要使用自定义类型 就必须要用到结构体类型构造类型 并 重命名 再利用 宏定义 来 替换个元素的数组的长度vz理解在头文件里书写 定义 类型 声明 函数声明 宏定义 等为啥不在Seqlist.h里写呢当然如果你下次还想再写一遍顺序表的各种代码可以这样分开写优点- 复用顺序表可重复使用不用重写- 解耦顺序表和通讯录互不影响- 清晰职责分明易读- 好维护修改方便不易出错2.就是进行 第四行 和 第十一行 所以 包括头文件就可以利用刚才定义的结构体类型建立联系使得通讯录和 顺序表 有机的结合起来喽实际上 只是改变了顺序表的 第一个参数的类型 就是 将 Int 变成 自定义类型然后 利用所以对 通讯录进行初始化就是对 顺序表的初始化 你会说 类型 不一样但是 你回想一下 顺序表初始化 第一参数是 指针类型 初始化 为 空了 无论是啥xx指针类型都是初始化为NULL了初始化 传指针是为了要修改原来的内容 不要奇怪再 商用的角度 是不会给别人看到你的seqlist.h或者SL.h的文件 的 这是公司的机密 所以别人可能不知道 SL *sl,是啥 只要告诉甲方参数 和注意事项的 文档就好了所以我们 要给SL 换个名字但是在这个头文件里 是没有 SL这个类型的只有在Seqlist.h里才有 的所以要用 #includeSeqlist.h此时 我们需要在 contact.h中利用 SL类型 需要包含头文件 如下图但是 会发现 重复包含了 你包含我我包含你这是不被允许的 这时就需要要到前置声明0.主要特点不完全类型声明只声明类型名称而不提供完整定义编译时优化减少不必要的头文件包含解决循环依赖当两个类需要相互引用时特别有用最佳实践在头文件中尽量使用前置声明替代完整包含保持声明与定义的同步更新前置声明是一种代码组织工具其核心目的是在编译阶段解决依赖问题而非运行时内存管理。也是 声明是方式的一种前置声明只做第一件事告诉编译器这个名字我认识它存在你先别报错。这两句 可以 合并为一句 就是 将声明和 重命名合并在一起了3.最后 重要理解 就是 将 这两个头文件都包含后 可以就在 Contact.c中去实现各种功能4.下面这张图 可以这样理解 就是在Contact.h中 定义了一个新的类型 叫 peoInfo左边 的 Seqlist.h 中需要将数组的类型改为 新的类型 需要用到该类型 需要包含 对应的头文件contact.h的然而在contact.h中用到了 struct Seqlist 你是不是想直接包含头文件啊 当然不行 这样就会 构成互包头文件1. 头文件被无限递归包含A.h → #include B.hB.h → #include A.h编译器陷入死循环直到栈溢出直接崩溃。2 代码冗余编译变慢同一个头文件被重复包含几十次编译器重复解析相同代码项目越大编译越慢。3. 逻辑混乱维护困难模块之间强耦合改A影响B改B影响A后期根本不敢动代码。所以解决方案 就可以用到 前置声明 就是下面中间图片 圈出来的只是在这个头文件里声明一下就好 这里为了区分而用了类型的重新命名5.就是 在 contact.c的文件里 去实现各种通讯录的功能 大部分都可以 直接使用原有 的顺序表的函数比方说 你在 contact.h 文件里 声明的函数 都要在contact.c文件里定义 就是实现初始化 增删查改 还有销毁做梦都要会的 大脑肌肉记忆6. 先实现 初始化 和销毁 理由是 直接调用 顺序表的就好 只是套了层皮 而已7. 就是 新增 add 利用顺序表的插入函数 前需要输入对应的结构体变量的每一个项目的值注意的地方是 scanf的第二个参数必须是 地址 因为要开辟空间去存储地址啊所以 要分清 是否要 取地址 还有就是 数组名就代表首元素地址8.删除某一位置的联系人首先 理解要删除 先存在 然后如何判断是否存在所以要先查找问题来了如何查找呢如图 结构体数组的每一个元素都是由五个数据项 组成一般我们采用局部代整体的思想就是用一个数据项来 查找 就类似红领巾 -- 少先队员 任意一个都是可以的哦这里采用 name 通过函数 找到对应的下标返回并利用指定位置的删除 复用的顺序表里的操作主要将两个点 1 是 循环结束条件是 到下标为 size-1的 位置2 就是 strcmp 这个函数用来比较字符串 需要对应头文件 string.h3,当用户不存在时 我直接返回并没有返回值只是终止函数罢了9.修改哦 和查找一样也是需要先查找的呀 没有怎么修改呢10.展示 display or show11. 可是使用 菜单来分装 各个功能12. 拓展 思考 修改 一个数据 是 删除再重新赋值吗why删除和销毁的区别 顺序表的底层特点 和 操作点

更多文章