我在一些地方看过一些开源库。而且,我已经意识到哪些库基本上是一堆很棒的结构。我见过很少的方法。
为什么C编写的库使用了这么多的结构?这背后的基础是什么?对我来说,这看起来像是一个模拟面向对象的尝试,因为快速搜索告诉我,每个结构都是由使用程序“实例化”来制作一些东西,例如,在我看过的一些Linux环境中每个窗口都是使用过的GUI库中的结构。
无论如何,问题是。
答案 0 :(得分:2)
结构是组织数据的好方法。数据是基础,正如弗雷德布鲁克斯几十年前所知道的那样:
告诉我你的流程图并隐藏你的桌子,我会继续 神秘莫测。告诉我你的桌子,我通常不需要你的 流程图;他们会很明显。
面向对象的编程不必仅仅用C模拟,它可以实现。例如,您是否知道在结构中可以存储对这些结构进行操作的函数指针,然后您更接近C ++的类?
还要考虑可扩展性:即使是采用多个参数的函数也可以通过采用单个结构来改进,因为当添加新参数时,它的签名不需要改变。
最后,C没有来自单个函数调用的多个返回值。但它可以返回一个结构,这是一回事。 C非常关于使用原始语言构建自己的工具,并且能够将一堆相关数据和/或函数集中在一个地方是一个很好的构建块。
答案 1 :(得分:2)
无论是否有面向对象,结构都是将聚合数据分组为单个符号的有用方法。您可以在任何地方复制结构,而无需每次都写出所有成员,如果必须,这可以使结构更容易更改。
如果您小心(参见sockaddr
),它还可以更容易地使用指针算法引用某些成员。
与数组相同的参数。
简单地说,不没有理由使用结构。
答案 2 :(得分:2)
使用指针检索数据时,结构非常有用。因为单个指针对于结构中的完整数据束是足够的。
答案 3 :(得分:1)
一,它保持API清洁。您可以传递包含N个成员的单个参数,而不是将N个单独的参数传递给函数。
二,它允许库隐藏程序员的实现细节。例如,C FILE
类型抽象出流I / O的一些细节,细节因实现而异。我们不需要知道这些细节,所以它们不会暴露给我们;我们只使用FILE
类型来传递这些信息。