【发布时间】:2016-06-15 23:46:30
【问题描述】:
例如,由于可能的对齐,指向不同类型的指针不能直接相互转换(也许不是完全正确的陈述,但你还是不明白我的想法)。是否有类似的技术原因导致您不能这样做:
struct A
{
int a, b;
} ;
struct B
{
int a, b;
} ;
void func(struct A a, struct B b)
{
a = b;
}
现在删除我并编辑这个问题,如果你理解它(在某些奇怪的情况下)并将它翻译给公众。
【问题讨论】:
-
考虑类型 - 苹果和橙子。他们是一样的吗?两者都可以根据果汁含量和体积来定义。即两个值。但是你会比较它们吗?
-
决定比较基于结构名称(标签),而不是结构。从长远来看,这对您有利。
-
@JonathanLeffler 究竟如何?
-
static_assert(sizeof a == sizeof b); memcpy(&a, &b, sizeof a); -
您的标题也与问题不匹配。标题的答案是“每次”:
struct A与struct B是不同的类型。 (这也是标准所说的)。但随后您的文本提出了一系列模糊的问题,可以概括为“为什么具有相同成员的两个结构不同类型?”
标签: c struct memory-layout