当前位置: 首页 > news >正文

学习嵌入式的第十六天----结构体 共用体

结构体---用来描述复杂数据的一种数据类型

构造类型----用户自定义类型

怎么描述一个数据类型?

语法:

struck   结构体名

{       成员列表;     }  ;

(1)struct  关键字  -----表示  在构造一个结构体的类型

(2) 结构体名-----用来描述  结构体这个类型  一个名称

(3) 成员列表---表示 要描述的复杂数据 中用到的 具体的成员变量

                             定义的方式  与之前变量的方式相同

                             多个成员 变量之间 用分号隔开  

(4)  最后 有一个分号 表示结束

   eg: struct  student

     {

         char  name [ 30 ];

          int    sno  ;

          float  score;

           char   sex;

                            };  ------表示定义出 一个数据类型

定义变量

定义指针变量

定义数组

注意:

1.结构体类型的使用的过程

   a.先定义出类型

   b.定义变量

2.定义变量  

    struct  结构体名  变量名;  ------结构体类型

结构体初始化:

struct student s={ };

初始化 ----看每个成员变量,具体是什么数据类型;

                  根据各个成员变量 自身的数据类型 进行初始化

                 初始化的顺序 按照定义的顺序  依次初始化

结构体变量的引用:

结构体数据  引用时  一般是引用到具体的成员数据

引用成员数据-----结构体运算符号( . )

使用: 

结构体变量名  .  成员名    -----表示访问到  某个结构体的 成员

->  指向结构体成员 运算符

结构体指针运算符

结构体类型的定义形式:

struct  demo

{         };

struct  demo  d;

--------形式1  先定义类型 然后定义变量

struct  demo

{       }d;

----------形式2  定义类型的同时  定义变量

struct 

{       }d;

形式3   定义类型的同时,定义变量 可以省略结构体名

结构体类型的大小:

1.在32位的平台上,默认都是按4字节对齐的

2.对于成员变量

 各自在自己的自然边界对齐

char ---1字节

short ---2字节

int  -----4字节

3.如果 成员变量有比4字节大的  

   此时 按照4字节对齐

4. 如果没有比四字节大的  

    整个结构体 按照最大的成员对齐

注意:

32位的平台   
 如果有超过4字节 ,按照4字节对齐
 如果没有超过4字节的,则按成员变量中最大对齐 

64位的平台
  如果超过4字节的,按超过的最大的成员变量对齐 
  如果没有超过4字节的,则按成员变量中最大对齐

同类型的结构体变量之间  可以相互赋值

struct  students s1;

struct  students s2;

s2=s1

qsort()---排序数组

void qsort(

void *base,-------要排序的数组的首地址

size_t nmemb,------数组元素的个数

size_t  size  ,  ------单个元素的大小

int (*compar)(const  void *,  const  void *) -----比较函数---提供比较依据

);

int (*compar)(const  void *a,  const  void *b)

{       比较函数   形参a和b用来接收 要比较的两个数组元素

                            }

           

总结:

1.理解结构体概念及用途

2.使用方法

   a.自己构造出这个结构体类型

   b.有了类型-----定义变量  定义数组  定义指针 

                          做函数形参  做函数返回值(结构体类型指针)

考点:

结构体类型的大小计算

内存对齐

为什么要内存对齐-----提高效率

共用体:union  

语法:

union  共用体名

{         成员变量;        };

特点:共用了一块内存空间

           共用了最大成员的内存空间

注意:

1.共用体初始化时,只能给一个值,默认时给到第一个成员的

2.共用体变量中的值,取决于最后一次给到的值  还要看能影响几个字节

对比 结构体

1.结构体中各个成员  拥有自己独立空间

2.共用体中 成员共用一块空间

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • C# winform 三层架构增删改查,(删除篇)
  • Python面试宝典第32题:课程表
  • cmake+ninja交叉编译android下的静态库
  • Elasticsearch 基本搜索
  • AI大模型开发——2.深度学习基础(1)
  • HCIP第七章(BGP拓展知识)
  • HCIP第六章(BGP)
  • 【Linux学习】动静态库从原理到制作
  • 【Java数据结构】---List(ArrayList)
  • STM32的USB接口介绍
  • vue前端自适应布局,一步到位所有自适应
  • 【vulnhub】WebDeveloper:1靶机
  • Linux下如何使用Netcat进行网络调试
  • 网络剪枝——network-slimming 项目复现
  • 剖析HTML 元素——WEB开发系列02
  • 【MySQL经典案例分析】 Waiting for table metadata lock
  • 10个确保微服务与容器安全的最佳实践
  • Java小白进阶笔记(3)-初级面向对象
  • Java知识点总结(JavaIO-打印流)
  • PHP 小技巧
  • Rancher-k8s加速安装文档
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • 关于Android中设置闹钟的相对比较完善的解决方案
  • 力扣(LeetCode)56
  • 浏览器缓存机制分析
  • 每天10道Java面试题,跟我走,offer有!
  • 排序算法之--选择排序
  • 我感觉这是史上最牛的防sql注入方法类
  • 硬币翻转问题,区间操作
  • 用Canvas画一棵二叉树
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • # 职场生活之道:善于团结
  • #pragma预处理命令
  • #ubuntu# #git# repository git config --global --add safe.directory
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • #职场发展#其他
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (aiohttp-asyncio-FFmpeg-Docker-SRS)实现异步摄像头转码服务器
  • (pojstep1.3.1)1017(构造法模拟)
  • (Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (第61天)多租户架构(CDB/PDB)
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (二)学习JVM —— 垃圾回收机制
  • (二刷)代码随想录第16天|104.二叉树的最大深度 559.n叉树的最大深度● 111.二叉树的最小深度● 222.完全二叉树的节点个数
  • (附源码)php新闻发布平台 毕业设计 141646
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (附源码)计算机毕业设计ssm电影分享网站
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (十三)Maven插件解析运行机制
  • (已解决)Bootstrap精美弹出框模态框modal,实现js向modal传递数据
  • (转)Linq学习笔记
  • .NET LINQ 通常分 Syntax Query 和Syntax Method