c - "object"和指向某种结构的指针之间有区别吗?

标签 c object struct

我最初的所有编程经验都是使用面向对象语言(Java、Python)。我现在正在学C,好像还是有类似对象的东西。

例如,FILE使用标准 C 库创建的指针。这只是一个指向 struct 内存位置的指针。 。这与 OO 语言中的对象本质上是一样的吗?

现有问题询问 struct 之间的区别和一个 class ,但我问的是程序如何使用这些东西。一个struct通过指针使用或访问,而 object是一个类的特定实例。从这个意义上说,似乎classstruct 更通用。虽然我添加这一段实际上只是为了防止这个问题被标记为重复,但它偏离了我原来的问题。

如果 FILE指针确实可以与某些 FILE 相媲美。不同语言中的对象,那么该“东西”的调用方式 FILE 之间的关键区别在哪里?将使用面向对象语言与非面向对象语言进行处理。似乎界限开始变得模糊。

最佳答案

在 C 编程语言中,对象是“执行环境中的数据存储区域,其内容可以表示值”(参见 ISO 9899:2011 §3.15)。几乎所有东西都是对象,包括指针、数组、结构体和整数(但不是函数)。

然而,这个概念与您在大多数面向对象语言中理解的“对象”不同。值得注意的是,C 中的对象没有与之关联的行为,没有类,也没有任何保证。甚至不能保证对象可以代表任何值。一个对象只是一点内存。

像 C 这样的过程编程语言中典型的 API 设计模式是有一组函数(例如 fopenfprintffclosefwrite 等)以及一组收集这些函数所需数据的结构类型(如 FILE)。这些结构和相应行为之间的关联是通过将结构传递给函数来实现的。

您可以用这样的面向对象语言构建所有的东西,包括虚拟函数调用和类,您只需手动构建所有这些。我相信这是 C 的优势,因为您不会被迫采用某种程序结构,您可以在适当的地方应用面向对象的设计模式,在不适当的地方使用其他方法。

关于c - "object"和指向某种结构的指针之间有区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34866721/

相关文章:

c - 在 make 文件中包含多个子目录

c - 取数组地址时指针运算结果不同

java - 我无法在java中访问我的对象的arraylist属性

java - 如何获取给定值是整数还是字符串

c++ - 将结构指针复制到指针

c - 指针上多个增量运算符的求值顺序

c - 在 C 宏中返回带引号的字符串

对象中的javascript间隔

c++ - 在 C 和 C++ 中通过指针访问结构

c - 声明相互使用的结构和函数引用