假设 T1
和 T2
是两种类型,并给出以下结构:
struct s
{
T1 x;
T2 y;
}
进一步,假设我们有一个 struct s
类型的对象:
struct s a;
据此,我们可以计算出指向对象的第二个结构成员的指针:
T2 *q = &s.y;
我正在寻找的是一种可移植的方法,可以从 q
计算 struct s *
类型的指针 p
使得 p
指向对象 a
。
最佳答案
给定T2 *q = &s.y;
, 然后 char *x = (char *) q - offsetof(struct s, y);
定义一个 x
指向 s
的第一个字节. offsetof
宏在 <stddef.h>
中定义.
然后人们可能会期待 struct s *p = (struct s *) x;
定义一个 p
指向s
,这取决于人们希望如何迂腐地解释 C 标准。 (标准未明确定义将指向 char
的指针转换为指向其第一个字节的结构的指针。我们可以采用 C 2018 6.3.2.3 中指针“转换回来”的标准规范7,到它的原始类型来涵盖这种情况。)我希望它能在所有正常的 C 实现中工作。
关于c - 如何以可移植的方式从指向结构成员的指针计算指向结构开头的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53895524/