我有两种类型的结构等价思想,我很难理解。
VAR_1 = int
VAR_2 = pointer to VAR_1
所以在这里,我觉得它们在结构上是等价的,因为类型在技术上都指向一个整数类型,对吗?
但是如果你有类似
的话VAR_3 = pointer to int
指向int与整数声明的指针是否使它们不相等?
我认为VAR_1和VAR_2在结构上是等价的,因为它们以正确的顺序包含相同的数据,但VAR_3失败,因为它不需要是指针?
答案 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中相同的基本类型。