Compiler construction 理解结构对等

Compiler construction 理解结构对等,compiler-construction,computer-science,structural-typing,Compiler Construction,Computer Science,Structural Typing,我有两种结构对等的想法,我正在努力理解 VAR_1 = int VAR_2 = pointer to VAR_1 在这里,我觉得它们在结构上是等价的,因为从技术上讲,它们都指向一个整数类型,对吗 但是如果你有 VAR_3 = pointer to int 指向int和integer声明的指针是否使它们不等价 我认为VAR_1和VAR_2在结构上是等价的,因为它们以正确的顺序包含相同的数据,但是VAR_3失败了,因为它不需要是指针?这完全取决于指针和int的概念是如何实现的,以及在特定场景中结

我有两种结构对等的想法,我正在努力理解

VAR_1 = int
VAR_2 = pointer to VAR_1
在这里,我觉得它们在结构上是等价的,因为从技术上讲,它们都指向一个整数类型,对吗

但是如果你有

VAR_3 = pointer to int
指向int和integer声明的指针是否使它们不等价


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

这完全取决于指针和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
这些成员可能被认为是不同的,因为它们的顺序不同,尽管它们的命名/类型相同


我的观点是,这完全取决于它所属的任何语言或环境的实施者,以及它在这个世界上的意义。

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

虽然语言实现细节很重要,但最终结构等价性不仅仅是指定给类型的字长。如果是这样的话,你甚至可以说float和int在C中在结构上是等价的,因为可能有些C编译器使用相同长度的字来实现它们

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

事实上,我认为类型系统与语言语义有更多的关系。指向int语义的指针不同于C中的int语义。因此,这两种类型在结构上并不等价

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

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