- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Possible Duplicate:
Why does this C code work?
How do you use offsetof() on a struct?
我在互联网上读到了这个 offsetof 宏,但它没有解释它的用途。
#define offsetof(a,b) ((int)(&(((a*)(0))->b)))
它想要做什么以及使用它的优势是什么?
最佳答案
R.. 对问题第二部分的回答是正确的:在使用现代 C 编译器时不建议使用此代码。
但是要回答你问题的第一部分,它实际上在做什么:
(
(int)( // 4.
&( ( // 3.
(a*)(0) // 1.
)->b ) // 2.
)
)
从内到外工作,这是......
a*
b
字段的地址int
从概念上讲,这是将一个结构对象放置在内存地址零处,然后找出特定字段的地址是什么。这可以让您计算出结构中每个字段在内存中的偏移量,以便您可以编写自己的序列化器和反序列化器以在结构与字节数组之间进行转换。
当然,如果您实际上取消引用零指针,您的程序将会崩溃,但实际上一切都发生在编译器中,并且在运行时没有实际的零指针被取消引用。
在大多数 C 运行的原始系统中,int
的大小是 32 位,与指针相同,所以这实际上是有效的。
关于c - C offsetof 宏如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38849515/
使用 OFFSETOF 宏更新结构字段的代码 #include #define OFFSETOF(TYPE, ELEMENT) ((size_t)&(((TYPE *)0)->ELEMENT))
刚看到What does the following macro do?我要问我自己的问题:为什么这么多应用程序的 header 定义 offsetof他们自己? 有什么原因吗?不靠谱? 最佳答案
来自 C++ 标准: A standard-layout class is a class that: — has no non-static data members of type non-sta
我想知道一个简单的宏 offset_of_ 是否需要对 not 的指针取消引用。例如,一个 C++(意味着这段代码将使用 C++ 编译器编译)结构,它声明了 packed 属性 struct A {
我想要 mystruct1 中的 offsetof() 参数行。我试过了 offsetof(struct mystruct1, rec.structPtr1.u_line.line) 还有 offse
就在这个问题因重复而被驳回之前,大多数(如果不是全部)问题都已接受答案,并带有过时/未定义的行为解决方案。 问题: 有没有办法在编译时获得指向成员数据的指针的偏移量: 不依赖于未定义的行为(nullp
我编写了一个小函数来获取结构内部字段的字节偏移量,但为了实现这一点,我每次都会迭代这些字段,直到找到符号。然而,在 C 中,offsetof() 仅在编译时计算一次,因为结构内部的偏移量不再改变。我想
当我这样定义结构时: struct abc{ int member1; int arr_member1; std::vector mVector; } 并且想要创建一个 arr_member 变
我必须在已经存在的大代码中添加一段代码。我的代码中有一个指针,*Ptr。该指针的类型为 unsigned char。 无符号字符 *Ptr; 我有以下结构。 struct { uint8_t t
相关文章: [c 循环双链表:rev 遍历为同一节点提供不同的列表指针地址](c circular double linked-list: rev traverse gives different l
这个问题已经有答案了: 已关闭11 年前。 社区去年审查了是否重新开放此问题,并将其关闭: 原始关闭原因未解决 Possible Duplicate: Why does this C code wor
根据我的另一个问题,这是一个我想避免 offsetof 的具体示例。 为了与 glVertexAttribPointer 一起使用,我必须对最后一个参数使用 offsetof。 glVertexAt
我想在这里实现“GetParent()”函数- class ChildClass; class ParentClass { public: .... ChildClass childO
我看到了offsetof这两个宏: #if defined(_MSC_VER) && !defined(_CRT_USE_BUILTIN_OFFSETOF) #ifdef __cplusplus
我有以下代码,以便能够访问结构数组中的多个字段(为简单起见,我已将其减少为两个)。最终指针计算的正确咒语是什么 *(ptr + offset) = 数据;因为我总是得到: 错误:从类型“int32_t
我一直在尝试使用宏连接 (##) 和 offsetof 宏来生成标识符,但没有成功: CMain.c:55: warning: implicit declaration of function 'Co
我正在尝试以下列方式使用 offsetof 宏: typedef unsigned char u8; typedef unsigned short u16; struct MapBlock { u
我正在尝试在我自己的另一个宏中使用 offsetof 宏,如下所示: #define MY_MACRO(struct_type, member) \ my_function(param1, o
这个问题在这里已经有了答案: Why does this implementation of offsetof() work? (8 个答案) 关闭 3 年前。 offsetof 在stddef.h
我试图通过使用 offsetof() 宏来学习如何访问结构成员,我遇到了这个例子 How can I access structure fields by name at run time?这一行:
我是一名优秀的程序员,十分优秀!