理解结构对等

时间:2015-11-11 19:07:05

标签: compiler-construction computer-science structural-typing

我有两种类型的结构等价思想,我很难理解。

VAR_1 = int
VAR_2 = pointer to VAR_1

所以在这里,我觉得它们在结构上是等价的,因为类型在技术上都指向一个整数类型,对吗?

但是如果你有类似

的话
VAR_3 = pointer to int

指向int与整数声明的指针是否使它们不相等?

我认为VAR_1和VAR_2在结构上是等价的,因为它们以正确的顺序包含相同的数据,但VAR_3失败,因为它不需要是指针?

2 个答案:

答案 0 :(得分:0)

这完全取决于如何实现指针和int的概念,以及结构等价在您的特定场景中的含义。

结构类型关注的是一个东西是否与另一个东西具有相同的结构,这意味着各个结构的实现非常重要。

这是两种类型的快速伪代码定义。

int definition
    32 bit value

pointer definition
    32 bit value

两种不同的类型,但它们包含完全相同的成员,即使在语义上它们的处理方式不同(指针假定来保存内存地址)。这些在结构上是等价的。

这是另一个实现。

int definition
    32 bit value

pointer definition
    64 bit value

这些在结构上并不相同,即使它们都有一个名为“' value'”的成员。怎么样?

int definition
    value
    other value

pointer definition
    other value
    value

这些可能不会被认为是相同的,因为成员的顺序不同,尽管它们的名称/类型相同。

我的观点是,这完全取决于 世界中任何语言或环境的实现者,以及 世界中的含义。

答案 1 :(得分:0)

晚会,但我只想表明我不同意另一个答案。

虽然语言实现细节很重要,但最终结构等效不仅仅是分配给该类型的字长。如果是这种情况,您甚至可以争辩说 float int 在C中可以在结构上等效,因为可能有些C编译器使用相同长度的单词来实现它们。

如果您仍然不相信,请考虑当您将指针指向int int 相比时会发生什么。

int p=100;
int *q=100;
p++;    //p = 101
*q++;  // Pointer moves to the next int in memory adding int word length to the underlying stored value
事实上,我认为类型系统与语言语义有很大关系。 Pointer-to-int 语义与C中的 int 语义不同。因此,这两种类型在结构上并不相同。

要回答你的问题,VAR_1和VAR_2在结构上并不相同(一个是int,另一个是指向int的指针)。但VAR_2和VAR_3在结构上是等价的。因为它们指向C中相同的基本类型。

相关问题