C和指针之结构体大小和成员变量位置距离结构开始存储的位置偏移字节
1、问题
1)、结构体大小
结构体成员的内存分配满足下面三个条件
2 结构体第一个成员的地址和结构体的首地址相同
3 结构体每个成员地址相对于结构体首地址的偏移量是该成员大小的整数倍,如果不是则编译器会在成员之间添加填充字节
4 结构体总的大小要是其成员中最大size的整数倍,如果不是编译器会在其末尾添加填充字节
2)、成员变量位置距离结构开始存储的位置偏移字节
我们用offsetof函数
2、测试Demo
#include <stdio.h>
#include <stddef.h>#define PRODUCT_SIZE 20struct A
{int a;char b;char d;
};struct AA
{char a;int b;char c;
};struct B
{char a;double b;char c;char d[9];int e;
};typedef struct
{char product[PRODUCT_SIZE];int qunatity;float unit_price;float total_amount;char s;
} Transaction;struct C
{int a;char b;short c;double d;int f;
};int main()
{printf("float size is %d\n", sizeof(float));printf("short size is %d\n", sizeof(short));printf("long size is
C和指针之结构体大小和成员变量位置距离结构开始存储的位置偏移字节相关推荐
- 结构体大小如何计算?
以下内容摘自此处: 作者:太平小小草 链接:https://www.jianshu.com/p/e772fff47465 来源:简书 结构体大小计算有三个原则: 一,结构体变量的首地址,必须是结构体 ...
- std::tuple、std::tie(可用于结构体大小比较)、std::pair用法
1.tuple应用: 解释:是一个元组,可包含无限多不同类型变量,pair的升级版,但没有pair得成员变量first.second. 1.1.代码: // tuple example #includ ...
- C语言sizeof结构体大小计算
一.一般类型 约定为32位系统,即char 1字节.short 2字节.int 4字节,指针是地址4个字节 定义:偏移量 偏移量指的是结构体变量中成员的地址和结构体变量地址的差.结构体大小等于最后一个 ...
- 结构体大小计算与位域大小计算
结构体大小计算与位域大小计算 本博文纯属个人理解,有错误请多指正. 首先,各个变量所占的字节: 类型 字节(64位) 字节(32位) char 1 1 unsigned char 1 1 short ...
- C/C++ sizeof函数解析——解决sizeof求结构体大小的问题
C/C++ sizeof函数解析--解决sizeof求结构体大小的问题 参考文章: (1)C/C++ sizeof函数解析--解决sizeof求结构体大小的问题 (2)https://www.cnbl ...
- 【转】彻底搞清计算结构体大小和数据对齐原则
数据对齐: 许多计算机系统对基本数据类型合法地址做出了一些限制,要求某种类型对象的地址必须是 某个值K(通常是2,4或8)的倍数.这种对齐限制简化了形成处理器和存储器系统之间的接口的硬件 设计.例如, ...
- 【C语言进阶深度学习记录】二十 结构体大小计算与结构体内存布局的详细方法
结构体大小的计算往往是面试笔试常考的知识.对于简单的结构体,可以一眼看出来,对于复杂的结构体,该如何计算结构体占用内存的大小呢? 本文学习所使用的编译器是gcc 4.4.5 使用其他编译器或者使用Wi ...
- Windows下struct和union字节对齐设置以及大小的确定(一 简介和结构体大小的确定)...
在windows下设置字节对齐大小的方式,目前我了解有三种: 1. 在编译程序时候的编译选项 /Zp[n],如 cl /Zp4 表示对齐大小是4字节: 2. 预处理命令 #pragma pack ...
- C语言结构体详解(结构体定义,使用,结构体大小等)
c语言结构体详解 1.c语言结构体 1.1 结构体基础知识 1.2 结构体声明 1.3 结构体特殊声明 1.4 结构体的自引用 1.5 结构体的大小的计算 1.5.1了解结构体大小计算规则 1.5.2 ...
最新文章
- mysql存储过程参数可选,如何在T-SQL存储过程中使用可选参数?
- AI开发者们,2017年你们过得好吗?
- 零拷贝和java NIO
- 【ARM】Tiny4412裸板编程之MMU封装
- 从零打造在线网盘系统之Hibernate查询与更新技术
- linux系统可以安装搜狗输入法,在Arch Linux系统中安装搜狗输入法的方法
- 转 Grub4Dos硬盘安装Fedora/CentOS Linux操作系统
- LINUX FFMPEG编译详细过程记录(最全)
- 《华为交换机学习指南》学习笔记·一
- 国王游戏(贪心算法)
- python矩阵运算算法_Python常用库Numpy进行矩阵运算详解
- 飞马网饿了么技术沙龙大数据专场圆满结束
- Swift GYB 简易教程
- 网易云音乐推出异乡人年度企划:不同圈层音乐人演绎他乡故事
- 义隆单片机C语言2ms中断,义隆单片机编程时应注意的几点.doc
- Nexus Repository和Docker Registry镜像仓库搭建及使用
- JAVA面向对象编程——学生喂养三种宠物:猫、狗和鸟
- 阿里架构师推荐,微服务分布式构架开发实战PDF,快快收藏吧
- 服务器上安装安卓系统教程,云服务器上安装安卓系统
- 汇总: 机器学习术语表
热门文章
- 如何分析 StackOverflow 异常 ?
- 进击吧! Blazor !第五期 安全
- 如何使用 dotTrace 来诊断 netcore 应用的性能问题
- ASP.NET Core 3.x启动时运行异步任务(一)
- [C#.NET 拾遗补漏]07:迭代器和列举器
- Autofac的AOP面向切面编程研究
- 自由源自于自律 及其他三则分享
- .Net之微信小程序获取用户UnionID
- 解决 VS2019 中.net core WPF 暂时无法使用 Designer 的临时方法
- CAP 2.4版本发布,支持版本隔离特性