我最初的所有编程经验都是使用面向对象语言(Java、Python)。我现在正在学C,好像还是有类似对象的东西。
例如,FILE
使用标准 C 库创建的指针。这只是一个指向 struct
内存位置的指针。 。这与 OO 语言中的对象本质上是一样的吗?
现有问题询问 struct
之间的区别和一个 class
,但我问的是程序如何使用这些东西。一个struct
通过指针使用或访问,而 object
是一个类的特定实例。从这个意义上说,似乎class
比 struct
更通用。虽然我添加这一段实际上只是为了防止这个问题被标记为重复,但它偏离了我原来的问题。
如果 FILE
指针确实可以与某些 FILE
相媲美。不同语言中的对象,那么该“东西”的调用方式 FILE
之间的关键区别在哪里?将使用面向对象语言与非面向对象语言进行处理。似乎界限开始变得模糊。
最佳答案
在 C 编程语言中,对象是“执行环境中的数据存储区域,其内容可以表示值”(参见 ISO 9899:2011 §3.15)。几乎所有东西都是对象,包括指针、数组、结构体和整数(但不是函数)。
然而,这个概念与您在大多数面向对象语言中理解的“对象”不同。值得注意的是,C 中的对象没有与之关联的行为,没有类,也没有任何保证。甚至不能保证对象可以代表任何值。一个对象只是一点内存。
像 C 这样的过程编程语言中典型的 API 设计模式是有一组函数(例如 fopen
、fprintf
、fclose
、fwrite
等)以及一组收集这些函数所需数据的结构类型(如 FILE
)。这些结构和相应行为之间的关联是通过将结构传递给函数来实现的。
您可以用这样的面向对象语言构建所有的东西,包括虚拟函数调用和类,您只需手动构建所有这些。我相信这是 C 的优势,因为您不会被迫采用某种程序结构,您可以在适当的地方应用面向对象的设计模式,在不适当的地方使用其他方法。
关于c - "object"和指向某种结构的指针之间有区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34866721/