c++ offsetof_函数offset的用法

c++ offsetof_函数offset的用法宏offsetof标准库stddef.h定义size_toffsetof(type,member);分析C库宏offsetof(type,member)会生成一个类型为size_t的整型常量,它是一个结构成员(member)相对于结构(type)开头的字节偏移量。成员是由member给定的,结构的名称是在type中给定的。type–这是一个参数class类型,是结…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

宏offsetof

标准库stddef.h

定义 size_t offsetof(type, member);

分析

C 库宏 offsetof(type, member) 会生成一个类型为 size_t 的整型常量,它是一个结构成员(member)相对于结构(type)开头的字节偏移量。成员是由 member 给定的,结构的名称是在 type 中给定的。

type — 这是一个 参数class类型,是结构体的名字,第二个参数member是结构体成员的名字,是一个有效的成员指示器。该宏返回结构体class中成员member的偏移量。偏移量是size_t类型的。

member — 这是一个 class 类型中的成员指示器,就是指定的class里的一个成员量。通常通过member得到type的起始地址,即指向type类型的指针。

该宏返回类型为 size_t 的值,表示 type 中成员的偏移量,是一个无符号整数类型数值,是 sizeof 关键字的结果。需要注意的是,这里在实际环境中会涉及到C语言内存对齐机制。

下面的实例演示了 offsetof() 宏的用法。

#include

#include

struct address {

char name[50];

char nationality[50];

int phone;

};

int main()

{

printf(“address 结构中的 name 偏移 %d 字节。\n”,

offsetof(struct address, name));

printf(“address 结构中的 nationality 偏移 %d 字节。\n”,

offsetof(struct address, nationality));

printf(“address 结构中的 phone 偏移 %d 字节。\n”,

offsetof(struct address, phone));

return(0);

}

编译并运行上面的程序,这将产生以下结果:

address 结构中的 name 偏移 0 字节。

address 结构中的 nationality 偏移 50 字节。

address 结构中的 phone 偏移100 字节。

应用

在实际的使用中,比较经典的情况:已知一个已经分配空间的结构体对象指针A中的某个成员B,使用offsetof宏,可根据B在A中的偏移量,获取该结构体指针对象A的首地址,从而进一步使用A。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/172109.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • IDDR和ODDR使用

    IDDR和ODDR原语是针对7系列芯片使用,spand可以使用IDDR2和ODDR2IDDR三种模式OPPOSITE_EDGEMode传统的输入DDR解决方案或OPPOSITE_EDGE模式是通过ILOGIC模块中的单个输入实现的。数据在时钟的上升沿通过输出Q1提供给FPGA逻辑,在时钟的下降沿通过输出Q2提供给FPGA逻辑。该结构类似于Virtex-6FPGA实现。图1显示…

  • DirectX修复工具(DirectX Repair)修复工具V4.0增强版「建议收藏」

    DirectX修复工具(DirectXRepair)是一款系统级工具软件,简便易用。本程序为绿色版,无需安装,可直接运行。本程序的主要功能是检测当前系统的DirectX状态,如果发现异常则进行修复。程序主要针对0xc000007b问题设计,可以完美修复该问题。本程序中包含了最新版的DirectXredist(Jun2010),并且全部DX文件都有Microsoft的数字签名,安全放心。本程序为了应对一般电脑用户的使用,采用了易用的一键式设计,只要点击主界面上的“检测并修复”按钮,程序就会自动完成校

  • linux 查看网络流量_linux 流量监控

    linux 查看网络流量_linux 流量监控可以使用iftop进行Linux机器的网络流量监控安装方法centos系统下第一步:安装EPEL源yuminstallepel-release第二部:安装iftopyuminstal

  • 改变QLabel背景颜色

    改变QLabel背景颜色在桌面应用程序开发时,需要显示一些状态信息,例如客户端是否掉线,串口是否打开等,我们可以用一些标志显示给用户,例如如果QLabel显示绿色,表示连接成功,显示黑色表示失败。代码如下:ui.label_Status->clear(); QPalettepalette; palette.setColor(QPalette::Background,Q…

  • 【爷青回系列】使用VMware虚拟机安装Windows XP系统!最详细!「建议收藏」

    【爷青回系列】使用VMware虚拟机安装Windows XP系统!最详细!「建议收藏」目录前言一、安装VMware虚拟机二、XP系统镜像下载三、创建WindowsXP虚拟机写在最后前言最近,肯德基的“田园脆鸡堡”回归了,摩尔庄园也正式“开园”了,爷青回!!!终于!终于!小时候左手田园脆鸡堡,右手摩尔庄园的幸福时刻终于要重现了。事先说明,这不是广告植入,也不是今天分享的重点。下面就由我向大家隆重介绍【爷青回系列】使用VMware虚拟机安装WindowsXP系统!操作环境:Windows10一、安装VMware虚拟机【官方下载地址】【免注册下载地址】由于官方下

  • pki体系包括_pct体系简介

    pki体系包括_pct体系简介1:PKI的概念        PKI(publickeyinfrastructure),即公钥基础设施,是一种以数字证书机制为基础,依托应用密码学技术(特别是公钥技术,包括加密、签名等应用技术模式)实施并提供安全服务的具体普遍适用性的网络安全基础设施。2:PKI的功能        一个有效的PKI系统必须是安全的和透明的,它的主要目的是通过自动管理密钥和证书,为用户建立起一个安全的

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号