2

我有两种难以理解的结构对等思想。

VAR_1 = int
VAR_2 = pointer to VAR_1

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

但是如果你有类似的东西

VAR_3 = pointer to int

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

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

4

2 回答 2

1

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

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

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

int definition
    32 bit value

pointer definition
    32 bit value

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

这是另一个实现。

int definition
    32 bit value

pointer definition
    64 bit value

尽管它们都有一个名为“值”的成员,但它们在结构上并不等效。这个怎么样?

int definition
    value
    other value

pointer definition
    other value
    value

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

我的观点是,这完全取决于它所属的任何语言或环境的实现者,以及事物在那个世界中的含义。

于 2015-11-11T19:46:07.113 回答
1

派对迟到了,但我只想声明我不同意另一个答案。

虽然语言实现细节很重要,但最终的结构等价不仅仅是分配给类型的字长。如果是这种情况,您甚至可以争辩说floatint在 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

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

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

于 2017-08-08T02:07:40.757 回答