我有两种难以理解的结构对等思想。
VAR_1 = int
VAR_2 = pointer to VAR_1
所以在这里,我觉得它们在结构上是等效的,因为从技术上讲,这些类型都指向整数类型,对吗?
但是如果你有类似的东西
VAR_3 = pointer to int
指向 int 与整数声明的指针是否使它们不等价?
我认为 VAR_1 和 VAR_2 在结构上是等效的,因为它们以正确的顺序包含相同的数据,但是 VAR_3 失败了,因为它不需要是指针?
我有两种难以理解的结构对等思想。
VAR_1 = int
VAR_2 = pointer to VAR_1
所以在这里,我觉得它们在结构上是等效的,因为从技术上讲,这些类型都指向整数类型,对吗?
但是如果你有类似的东西
VAR_3 = pointer to int
指向 int 与整数声明的指针是否使它们不等价?
我认为 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
尽管它们都有一个名为“值”的成员,但它们在结构上并不等效。这个怎么样?
int definition
value
other value
pointer definition
other value
value
这些可能不被认为是相同的,因为成员的顺序不同,尽管它们的名称/类型相同。
我的观点是,这完全取决于它所属的任何语言或环境的实现者,以及事物在那个世界中的含义。
派对迟到了,但我只想声明我不同意另一个答案。
虽然语言实现细节很重要,但最终的结构等价不仅仅是分配给类型的字长。如果是这种情况,您甚至可以争辩说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
事实上,我认为类型系统与语言语义有更多的关系。指向 int 语义的指针与 C 中的 int语义不同。因此这两种类型在结构上并不等价。
要回答您的问题,VAR_1 和 VAR_2 在结构上并不等效(一个是 int,另一个是指向 int 的指针)。但是 VAR_2 和 VAR_3 在结构上是等价的。因为它们指向 C 中相同的基本类型。