"对象"之间是否存在差异?和指向某种结构的指针?

时间:2016-01-19 00:46:00

标签: c object struct

我最初的编程经验都是面向对象语言(Java,Python)。我现在正在学习C,似乎仍然存在类似物体的东西。

比如说,用标准C库创建的FILE指针。这只是指向struct的内存位置的指针。这与OO语言中的对象基本相同吗?

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

如果FILE指针实际上与另一种语言中的某个FILE对象相当,那么" thing"之间的关键区别在哪里?调用FILE将以面向对象的语言与非面向对象的语言进行处理。似乎线开始模糊。

1 个答案:

答案 0 :(得分:1)

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

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

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

您可以使用面向对象语言构建所有内容,包括虚函数调用和类,您只需手动构建所有这些内容。我相信这是C的优势,因为你没有被强制进入某个程序结构,你可以在适当的地方应用面向对象的设计模式,而不是使用其他方法。