目录

  • 概述
  • 空间分配
  • 位定义

概述

本文收录结构体相关的知识点,将遇到的相关问题和找到的解释说明集中在一起,便于需要时快速查找。

空间分配

请计算以下两个结构体所占用的空间大小:

 struct CAT {char a;short b;int c;short d;}cat; struct DOG {int a;short b;short c;char d;}dog;

可以看到,这两个结构体组成元素是相同的,只是定义时的顺序不同。使用sizeof查看占用的内存大小:

1个char+2个short+1个int,不应该是1+4+4=9吗,为什么会是12?空间分配的过程是怎么样的?

struct内存原则: 从上至下进行内存分配,对齐方式以当前分配到的内部成员类型最宽字节数为基准;整体以结构体成员最宽类型字节为基准,且整个结构体的总大小为最宽基本类型成员大小的整数倍。点击跳转

位定义

请用结构体表示以下一帧CAN信息:
11bit的ID、1bit的RTR、3bit的长度、8byte的数据,
要求使用的空间尽可能小。
从空间要求上看,可以知道这是考验对结构体位定义的使用:

struct CANFRAME {uint16_t ID : 11;uint16_t RTR : 1;uint16_t LEN : 3;uint8_t DATA[8];
}

需要注意,使用位定义的成员,类型应相同(更多解析)。

结构体的空间分配和位定义相关推荐

  1. C语言结构体存储空间分配的原则

    C语言结构体存储空间分配的原则 我们在嵌入式编程中经常用到结构体,结构体内成员变量的声明顺序不同,会带来结构体整体存储空间大小的不同,这是因为在C语言里,结构体里元素存储要对齐,这个"对齐& ...

  2. C语言 结构体存储空间分配

    这两天在看结构体,一直在琢磨结构体的存储空间分配的问题,琢磨了半天总算明白了.和大家分享一下,希望能有所帮助. 相信大家都知道结构体里元素存储要对齐吧,话虽是没错,只是这个"对齐" ...

  3. 2、采用结构体数组编写程序,定义一个含职工姓名、工作年限、工资总额的结构体类型,从键盘输入5名职工的信息,最后再对工作年限超30年的职工加1000元工资,并输出工资变化后的所有职工的信息

    2.采用结构体数组编写程序,定义一个含职工姓名.工作年限.工资总额的结构体类型,从键盘输入5名职工的信息,最后再对工作年限超过30年的职工加1000元工资,并输出工资变化后的所有职工的信息(要求用下标 ...

  4. 结构体和联合体详解-定义及初始化

    文章目录 前言 一.结构体 1.1结构体类型 1.2定义结构体变量 1.3 初始化结构体变量 1.4结构体变量的引用 二.结构体数组 2.1定义结构体数组 2.2初始化结构体数组 三.联合体 3.1初 ...

  5. C#总结:C#调用C++的动态库Dll遇到的问题[动态库调用/结构体指针调用/union共同体定义]

    记录使用C#调用C++的生成的DLL手柄键盘驱动库包括****.sys(驱动文件)和****.dll(库文件)的全部问题. C#调用C++的库有两种:静态调用和动态调用 静态调用,使用.net 提供的 ...

  6. C++阶段01笔记08【结构体(基本概念、定义与使用、数组、指针、嵌套、const使用)】

    C++| 匠心之作 从0到1入门学编程[视频+课件+笔记+源码] 目录 8 结构体 8.1 结构体基本概念 8.2 结构体定义和使用 示例 8.3 结构体数组 示例 8.4 结构体指针 示例 8.5 ...

  7. linux gd结构体,U-Boot中gd的定义和使用

    最近在做uboot中nand启动相关的工作,遇到一个问题一直纠结着.现在终于明白了这个问题,想想还有好多兄弟在某个黑暗的角落里或者某台电脑前纠结着呢,所以赶紧写下来以供查阅. U-Boot源代码下载地 ...

  8. C语言结构体成员有函数的定义与使用

    ```c#include <stdio.h> typedef int (*FunHandle)(int, int); //定义 指向函数的指针 struct Example {int a; ...

  9. 结构体中函数应该怎样定义才能返回值_15 函数的基本使用

    本文对应的视频讲解如下: 1.函数基础 python快速入门(一)_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili​www.bilibili.com 2.函数的返回值 https://www.bi ...

最新文章

  1. 8个方法解决90%的NLP问题
  2. 汇编语言 寄存器 2.9~2.12 总结
  3. jd-eclipse反编译插件的离线安装和使用
  4. 四步相移法怎么获得相位信息_如何拥有超强的学习能力?世界公认的费曼学习法了解一下...
  5. WPF 框架全构建环境虚拟机硬盘分享
  6. 数据挖掘技术在信用卡业务中的应用及实例分析
  7. android中设置lmargin简书,超详细React Native实现微信好友/朋友圈分享功能-Android/iOS双平台通用...
  8. 微软11月补丁星期二值得关注的6个0day及其它
  9. Celery:routing
  10. 涉密计算机多用户审批表,涉密计算机及信息系统安全策略
  11. 勒索病毒全系列补丁下载链接
  12. Java 山上有一口缸可以装50升水,现在有15升。老和尚叫小和尚下山挑水,每次挑5升,要挑几次。
  13. 手把手教你搭建自己的微信公众号
  14. mysql 如何对集合进行遍历
  15. 快手发布《2021磁力引擎营销通案》,以信任基因赋能全域营销
  16. 买牛奶 (c++基础)
  17. vs2010打开需要安装 service pack1
  18. 费雪MOGAFX方程式是什么?(三)
  19. Android对应的版本号
  20. Java CsvReader 读取csv文件

热门文章

  1. 计算机点击右键出现错误,电脑右键个性化打不开了怎么办
  2. java stream流_恕我直言你可能真的不会java第4篇:Stream管道流Map操作
  3. 利用系统级别的光谱成像技术分析细胞器的互作组学
  4. c语言static知识点,C语言知识点集锦
  5. dell服务器r730老自动重启_Dell R730服务器安装windows server 2008 R2蓝屏问题
  6. python短信验证码_玩转python之获取短信验证码
  7. 云服务器怎么配置文件,云服务器网卡怎么配置文件
  8. win安装 lua php 扩展,window平台搭建Lua开发环境
  9. 系统学习NLP(二十三)--浅谈Attention机制的理解
  10. php ajax 域名查询,PHP+AJAX 域名查询 PHP 源代码