`

用一个宏定义FIND求一个结构体CTYPE里某个变量CNUM相对了CTYPE的编移量(转)

阅读更多

用一个宏定义FIND求一个结构体CTYPE里某个变量CNUM相对了CTYPE的编移量。 
如:stuct student 
     { 
       int a; 
       char b[20]; 
       double ccc; 
     } 
则: 
FIND(student,a); //等于0 
FIND(student,b);//等于4

 

#define    FIND( struc, e ) (size_t)&(((struc*)0)- >e)

(struc*)0----------表示将常量0强制转化为struc *型指针所指向的地址 
&(((struc*)0)- >e)--表示取结构体指针(struc*)0的成员e的地址,因为该结构体的首地址为0,所以其实就是得到了成员e距离结构体首地址的偏移量. 
(size_t)-----------是一种数据类型,为了便于不同系统之间移植而定义的一种无符号型数据,一般为unsigned int

 

(struc*)0                    表示假设在0地址处有一个结构体struc 
((struc*)0)- >e               表示在0地址处的结构体struc的成员e 
&(((struc*)0)-    >e)          表示在0地址处的结构体struc的成员e 的地址 
(size_t)&(((struc*)0)-    >e) 将0地址处的结构体struc的成员e 的地址转换成整数类型

分享到:
评论

相关推荐

    下面程序是定义一个结构体,并为其定义结构体变量,对其值输入、输出。

    在实验 1 中,我们定义了一个名为 `worker` 的结构体,它包括三个成员变量:`num`、`sex` 和 `salary`。然后,我们声明了三个结构体变量 `work1`、`work2` 和 `work3`,并对它们进行了初始化。在程序中,我们使用 `...

    查找结构体向量变量(Vectors, structs and find)

    "查找结构体向量变量(Vectors, structs and find)"这个主题探讨了如何在这样的数据结构中高效地搜索特定的结构体元素,特别是基于某个特定变量,如ID,来更新相关的数值。 首先,让我们定义一个简单的结构体类型...

    C#结构体指针的定义及使用详解

    假设有一个非托管指针`IntPtr iptr`指向一块内存,里面存储的是一个`VGAStat`类型的结构体,可以使用`Marshal.PtrToStructure`方法将其转换为结构体对象: ```csharp VGAStat entries = (VGAStat)Marshal....

    C++结构体/函数定义转换C#函数定义/结构体

    - `winsiggen.exe`可能是一个Windows应用程序,它可能通过P/Invoke调用Windows API。在C#中,我们需要正确地定义API函数签名,并用`DllImport`导入。 6. **XML文件的作用**: - `windows.xml`可能是包含DLL导出...

    1.定义一个结构体变量(包括年、月、日)。计算该日在本年中是第几天,注意闰年的问题。

    定义一个结构体变量(包括年、月、日)。计算该日在本年中是第几天,注意闰年的问题。 2.编写一个函数print, 打印一个学生的成绩数组, 该数组中有5个学生的数据记录,每个记录包括num,name,score[3],用主函数输入...

    DBC 转结构体 修复版

    "DBC 转结构体 修复版" 是一个专门处理DBC文件的工具,它可以帮助开发者将DBC文件中的定义转换为编程语言中的结构体,比如C/C++。这样,在新项目中引入CAN通信功能时,无需手动编写结构体定义,可以显著提高开发效率...

    结构体变量的复制与比较

    在这个例子中,我们定义了一个名为`comparePersons`的函数来比较两个`Person`结构体变量是否完全相同。通过分别比较每个成员的值来确定两个结构体变量是否相等。 #### 五、实际案例分析 根据给定的部分内容,我们...

    结构体变量(包括年、月、日),编程序,要求输入年月日,程序能计算并输出该日在本年中是第几天

    在本例中,我们定义了一个名为Date的结构体变量,其中包含三个成员变量:year、mouth和day,它们分别用于存储年、月和日的信息。 在程序中,我们使用switch语句来计算日期在一年中的天数。switch语句是一种选择结构...

    VC++结构体成员变量和方法

    在VC++编程环境中,结构体(Struct)是C++中的一个基本类型,它与类(Class)有许多相似之处,但存在一些关键的区别。本篇文章将深入探讨VC++中结构体的成员变量和方法,以及如何实现结构体成员的调用。 1. **...

    定义嵌套结构体数组

    总结一下,定义嵌套结构体数组是创建复杂数据结构的一种方法,它允许我们在一个结构体内组合不同类型的变量,并且可以形成有层次的数据模型。在实际编程中,嵌套结构体数组广泛应用于各种场景,如数据库记录、文件...

    c++通过结构体(struct)全局变量在多线程中传递参数

    在这个例子中,`SharedData`结构体包含一个整型变量`value`和一个互斥锁`mtx`。`workerThread`函数和`main`函数分别在不同的线程中操作`value`,每次修改前都先锁定互斥锁,确保了线程安全。 在Linux环境下,使用`...

    sizeof求struct结构体内存大小的问题

    3. **结构体尾部填充**:结构体的总大小也必须满足最后一个成员变量的对齐规则,这意味着结构体的大小可能是最后一个成员变量大小的整数倍。如果不足,则会在末尾添加填充字节。 4. **不同平台和编译器差异**:内存...

    C语言程序设计:结构体.pptx

    结构体成员名与程序中变量名可相同,两者不代表同一个对象。 ;结构体变量的初始化 形式一 整体赋值法 ;结构体变量的引用 引用规则 结构体变量不能整体引用,只能引用变量成员;main() { struct student { int No; ...

    结构体使用详解,与结构体如何嵌套使用

    结构体的嵌套使用是指在一个结构体中包含其他结构体作为其成员变量的情况。这在实际编程中非常常见,可以帮助我们更灵活地组织和管理数据。 #### 1. 结构体中包含结构体 结构体可以在其成员列表中包含另一个结构体...

    C++自定义结构体排序实现

    在代码中,我们首先定义了一个名为AssessTypeInfo的结构体,该结构体包含三个成员变量:m_uiType、m_szName和m_uiTotal。然后,我们重载了小于号(<)和大于号(>)运算符,以便实现升序和降序排序。 在main函数中...

    高亮VC中的宏与结构体

    结构体是C++中复合数据类型的一种形式,它允许我们将多个不同类型的变量打包成一个单一的对象。结构体在组织复杂的数据结构,如链表、树或图形结构时非常有用。在VC中,结构体的定义通常以`struct`关键字开始,之后...

    嵌入式编程中的宏定义

    下面我们将介绍一些常用的宏定义,包括防止头文件重复包含、类型定义、获取指定地址上的一个字节或字、求最大值和最小值、获取结构体中的偏移量和字节数等。 1. 防止头文件重复包含 在编程中,头文件的重复包含是...

    C语言 实验八 结构体和共用体实验.doc

    这里定义了一个名为 node 的结构体,它包含一个整数成员变量 num 和一个指向下一个节点的指针 next。 六、共同体的概念和应用 共同体是一种数据结构,它的定义形式与结构体相似,但它们的含义是不同的。共同体变量...

    Android 结构体定义

    在Android开发中,结构体(Struct)是一种非常重要的数据组织形式,它允许开发者自定义复杂的、包含多个数据类型的组合体。结构体定义通常用于在不同的组件之间传递数据,尤其是在网络通信,如向服务器发送或接收...

    C/C++语言中全局变量重复定义问题的解决方法

    宏定义、结构体定义、函数声明以及全局变量定义放到一个head.h头文件中 函数的定义放到head.cpp中 main函数放到main.cpp中 然而却报错了,提示xxx变量在*.obj文件中已定义 问题出现的原因 为什么会出现这种...

Global site tag (gtag.js) - Google Analytics