【发布时间】:2015-02-09 20:30:11
【问题描述】:
指向结构的指针是否像指向第一个元素的指针一样对齐?
或
在指向结构的指针和指向其第一个成员(反之亦然)的类型的指针之间是否存在转换?
(我希望他们是同一个问题...)
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 可以定义为任何类型
背景:
我问过这个question 一位用户在评论其中一个答案时提出了 C11 6.3.2.3 p7 声明:
"指向对象类型的指针可以转换为指向对象类型的指针 不同的对象类型。如果结果指针不正确 为引用的类型对齐,行为未定义”
但是我无法确定这何时会成为问题,我的理解是填充将允许结构的所有成员正确对齐。我是不是误会了?
如果:
struct element e;
tdefa* a = &e.x;
然后会起作用:
tdefa* a = (tdefa*)&e;
也会。
【问题讨论】: