offset偏移量_如何调用结构体

offset偏移量_如何调用结构体一、函数原型#include<stddef.h>size_toffsetof(type,member);offsetof原型定义:defineoffsetof(t,m)((size_t)&((t*)0)->m)1、关于&((t*)0)的解释1-1:(type*)0作用是强制类型转换,将0转换为(type*)类型,一个type指针类型1-2:编译器在会将&((t*)0)优化为直接取地址,因为这种表达是:先访问空间,再取空间的

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

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

一、函数原型

#include <stddef.h>
size_t offsetof(type, member);

offsetof原型定义:define offsetof(t,m) ((size_t)&((t *)0)->m)
在这里插入图片描述
1、关于&((t *)0)的解释

1-1(type *) 0作用是强制类型转换,将0转换为(type*)类型,一个type指针类型
1-2:编译器在会将 &((t *)0) 优化为直接取地址,因为这种表达是: 先访问空间, 再取空间的地址,就相当于直接取地址。

2、注意:组成结构的字段的大小在不同的实现中可能不同,编译器可能在字段之间插入不同数量的填充字节。因此,元素的偏移量不一定是前面元素大小的总和。

二、函数demon,截取自man手册

#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>

int main(void)
{ 
   
	struct s { 
   
		int i;
		char c;
		double d;
		char a[];
	};

	/* Output is compiler dependent */

	printf("offsets: i=%ld; c=%ld; d=%ld a=%ld\n",
			(long) offsetof(struct s, i),
			(long) offsetof(struct s, c),
			(long) offsetof(struct s, d),
			(long) offsetof(struct s, a));
	printf("sizeof(struct s)=%ld\n", (long) sizeof(struct s));

	exit(EXIT_SUCCESS);
}

在这里插入图片描述

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

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/172097.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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