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