是一个指向该结构排列,好像它是一个指向第一个元素?
要么
是指向一个结构和指针到它的第一部件(或反之亦然)的种类不断UB之间转换?
(我希望他们有同样的问题...)
struct element
{
tdefa x;
tdefb y;
};
int foo(struct element* e);
int bar(tdefa* a);
~~~~~
tdefa i = 0;
foo((struct element*)&i);
要么
struct element e;
bar((tdefa*)&e);
凡tdefa
和tdefb
可以被定义为任何类型
背景:
我问这个问题 ,并在评论的用户是各国带来了C11 6.3.2.3 P7的答案之一:
“A指针的对象类型可以被转换为一个指针到一个不同的对象类型。如果得到的指针没有被正确用于该被引用类型对齐,该行为是未定义”
但是我无法工作了的时候,这将成为一个问题,我的理解是,填充将使该结构的所有成员正确对齐。 我误会了?
而如果:
struct element e;
tdefa* a = &e.x;
将有帮助:
tdefa* a = (tdefa*)&e;
会了。