繁体   English   中英

给定一个指向结构内成员的指针,如何返回指向该结构的指针?

[英]Given a pointer to a member within a struct, how to return a pointer to this struct?

这是一道面试题。 我不知道如何解决它。 任何人都可以帮助我:?

给定一个指向结构中成员 a 的指针,编写一个返回指向该结构的指针的例程。

谢谢!

首先,为了实现这一点,您需要知道封闭结构StructType的类型和成员member的名称。 那必须是给定的。 没有它,问题就没有解决方案。

其次,我不知道为什么其他答案坚持重新发明轮子(并在此基础上进行未定义和不可移植的黑客攻击)而不是使用标准的offsetof宏。 使用offsetof的答案是

StructType *pstruct = 
  (StructType *) ((char *) pmember - offsetof(StructType, member));

Linux kernel 代码(GPLv2 许可)包括一个方便的container_of()宏:

#define container_of(ptr, type, member) ({                      \
        const typeof( ((type *)0)->member ) *__mptr = (ptr);    \
        (type *)( (char *)__mptr - offsetof(type,member) );})

它是这样使用的:

static inline struct ext3_inode_info *EXT3_I(struct inode *inode)
{
    return container_of(inode, struct ext3_inode_info, vfs_inode);
}

@Richard 的回答非常好; 主要区别在于此代码被参数化以接受任何struct和任何成员,因此相应地更复杂。

给定一个名为s的结构和一个名为m的成员

struct s * BaseS(byte *p)
{
     return (struct s *) (p - ((byte*) &(((struct s *)0)->m)));
}

这个想法是获取成员的偏移量并从指针中减去它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM