c - 如何以可移植的方式从指向结构成员的指针计算指向结构开头的指针?
问题描述
假设T1
和T2
是两种类型,并给出以下结构:
struct s
{
T1 x;
T2 y;
}
此外,假设我们有一个类型为 的对象struct s
:
struct s a;
由此,我们可以计算出指向对象第二个结构成员的指针:
T2 *q = &s.y;
我正在寻找的是一种可移植的方法,可以从q
指向objectp
的类型指针struct s *
进行计算。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
指向 的a s
,这取决于人们希望如何迂腐地解释 C 标准。(将指针转换为指向char
它的第一个字节的结构的指针并未由标准明确定义。我们可以将标准的规范中的指针“转换回”,在 C 2018 6.3.2.3 7 中,它的原始类型来涵盖这种情况。)我希望它可以在所有正常的 C 实现中工作。
推荐阅读
- javascript - javascript中从node_modules导入的问题
- android-layout - 使用 alpha 不透明度为 textView 创建背景
- java - SortedSet.subset 返回大小 == 0 子集
- powershell - 从 Powershell 中的 PSCustomObject 检索元素
- python - 不同的 Python 日志记录处理程序不起作用
- android - 使用 MediaStore 在 ContentResolver 的 insert() 方法上获取 Null Uri
- python - 如何使用序列化程序在 django 中的所有相关表中插入产品数据
- mongodb - PyMongo Regex 查询索引位置
- swift - swift中UINavigationBarItem的问题
- node.js - Mongoose - 为什么演员表日期失败?