C/C++自定义类型(详解struct,enum,union)

news2024/12/25 8:57:45

目录

一,struct

1)结构及一般使用方法

2)无名结构体

3)巧用typedef

4)struct小细节

5)补充内存对齐(提高程序可移植性,提高运行效率)

二,enum

1)结构及一般使用方法

2)enum的作用和优点

三,union

1)结构

2)特点


一,struct

1)结构及一般使用方法

struct name{//名称
    //数据类型
      int a;
      char b;
      float c;
};//注意有分号,可在'}'后面,';'前面直接创建变量
struct name xiao={666,'s',3.14};//利用名称创建变量

2)无名结构体

无名结构体就是没有名称,意味着,除了在'}'后面,';'前面直接创建变量,无法在其他地方创建变量。

3)巧用typedef

利用typedef能够给struct起一个别名,起到简化程序,使代码可读性更强,

typedef struct name{
      int a;
      char b;
      float c;
}han;
struct name xiao={666,'s',3.14};
han kun={666,'s',3.14};//han等于struct name;

4)struct小细节

struct 在创建变量前是不会分配内存空间的。struct在'}'后面,';'前面直接创建的变量是全局变量。

5)补充内存对齐(提高程序可移植性,提高运行效率)

先讲解内存对齐:

首先理解内存对齐规则:

1)第一个数据的偏移量为0(偏移量为距离首字节的距离)

2)每个数据的存储位置必须是这个数据的对齐数的整数倍字节位置(对齐数为系统默认的对齐数和自身字节大小中的较小值。

3)最后内存必须是结构体中数据中最大对齐数的整数倍。

4)如果嵌套了结构体,则这个结构体的对齐数是结构体中数据中最大的对齐数

5)如果是数组的话对齐数是数组类型,但是空间必须大于数组,而且是对齐数整数

接下来看题讲解

//求AA_t大小
typedef struct{
  int a;
  char b;
  short c;
  short d;
}AA_t;

二,enum

1)结构及一般使用方法

enum name{//名称
  //数据
  int a,//默认第一个为0,往下每次递增1
  int b,//b=1
  int c=6,//可以自行赋值,往下每次递增1
  int d  //d=7
}name1;//也可在创建变量
 
enum name name2=3;//创建变量

2)enum的作用和优点

类似于宏,相当于其起别名,但它有自己的优点:

  1. 增加代码的可读性和可维护性
  2. #define定义的标识符比较枚举有类型检查,更加严谨。
  3. 便于调试
  4. 使用方便,一次可以定义多个常量

三,union

1)结构

union name{//名称
  //数据成员
  int a;
  char c;
}name1;//类推可以创建变量
union name name2;//创建变量

2)特点

所有成员共用一块空间,所有它们不能数据成员同时存在,改变一个数据成员所有的数据成员都会改变,数据成员的地址都一样。

篇外:由于篇幅有限,如果有不了解的概念等,可以评论区告诉我,我会为诸位一一解答

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/754605.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

H3C-Cloud Lab实验-RIP实验

实验拓扑图: 实验需求: 1. 按照图示配置 IP 地址 2. 配置 RIP 实现全网路由互通 3. 路由器之间需要开启接口身份验证来保证协议安全性,密钥为 123456 实验步骤: 1. 配置R1的IP地址 2. 配置R2的IP地址 3. 配置R3的IP地址 4. 在…

【解决】Android Studio打包出现not found for signing config ‘externalOverride‘

问题出现场景 之前我的这个项目在另一台电脑上开发,现在迁移到这台计算机上,出现了key报错的问题,网络上有些说需要在XML中进行配置signature相关的内容,这个感觉比较复杂,本文主要介绍一个简单的解决方法,…

半同步半反应堆线程池(三)

本章讲解线程池所涉及的基础知识,包括服务器基本框架、I/O模型、事件处理模式等。 主要围绕服务器项目中涉及的知识进行介绍,若想了解更多相关知识,请参考《Linux下高性能服务器编程》。 1.服务器编程基本框架 主要由I/O单元,逻…

【分布式任务调度】XXL-JOB执行器配置及定时任务的创建(二)

文章目录 1. 前言2. 调度器配置2.1.依赖及配置2.2.任务实例2.3.调度中心管理配置 3. 总结 1. 前言 在上一篇《XXL-JOB调度中心集群部署配置》 中,我们已经得到了一个调度中心的集群,接下来需要了解如何配置调度器及创建定时任务。 本文的主要内容包括&a…

MySQL的登录与退出(图文详解)

目录 一、服务的启动 1、方式1:使用图形界面工具启动 方式2:使用命令行工具启动 二、服务的停止 方式1:使用图形界面工具停止 方式2:使用命令行工具停止 二、自带客户端的登录与退出 登录方式1:MySQL自带客户端 …

详解 ➾【FTP服务工作原理及连接模式】

详解 ➾【FTP服务工作原理及连接模式】 🔻 前言🔻 一、FTP服务简介🚥 1.1 FTP工作原理🚥 1.2 匿名用户访问的产生🚥 1.3 FTP服务的连接模式🚥 1.4 几种流行的FTP服务器软件 🔻 总结—温故知新 &…

toastr js clear 不成功的一个原因和解决办法

在系统里使用了 toastr js 即时弹出后台通知。toastr 支持先后显示多个弹出消息,这点很好。然后我又加了自定义样式,使得消息通知更好看些。 我的想法是通知消息显示一段时间后关闭;也可点击关闭按钮,关闭通知并标记已读;或者点击通知消息中的链接查看通知相关的内容,同时…

Python面向对象学习整理(一)

一、面向对象中的几点概念 1.1 什么是类? 类:用户定义的对象原型(prototype),该原型定义了一组可描述该类任何对象的属性,属性是数据成员(类变量 和 实例变量)和方法,可…

(简单)剑指Offer 21. 调整数组顺序使奇数位于偶数前面 Java

记数组nums的长度为n。从先nums左侧开始遍历,如果遇到的是奇数,就表示这个元素已经调整完成,继续从左往右遍历,直到遇到一个偶数。然后从nums右侧开始遍历,如果遇到的是偶数,就表示这个元素已经调整完成了&…

arcgis拓扑检查

不能有悬挂点 不能有伪结点***路网处理很重要,看研究吧。 一直默认到最后。 导入要素类,单个 toupu2右键新建拓扑(T) 一般选不能有悬挂点,不能重叠。 一路默认 是 拉进图层可视化 线要素的话记得添加字段length&#…

Redis数据结构 — Dict

目录 Dict结构设计 — rehash rehash触发机制 Dict扩容 Dict收缩 ​编辑渐进式 rehash 哈希表优点在于,它能以 O(1) 的复杂度快速查询数据。为解决哈希冲突,Redis 采用了「链式哈希」来解决哈希冲突,在不扩容哈希表的前提下,…

直播美颜SDK与智能美妆:技术融合的未来

对于许多直播主和观众来说,如何在直播中呈现最佳的外貌成为了一个重要问题。为了解决这个问题,直播美颜SDK与智能美妆技术的融合应运而生,为用户带来了前所未有的美妆体验。 简单来讲,直播美颜SDK可以理解为计算机视觉技术和人工…

WebDAV之π-Disk派盘 + Solid Explorer

Solid Explorer 支持WebDAV方式连接π-Disk派盘。 Solid Explorer 是一款非常优秀的 Android 文件管理器,Material Design 设计风格,双栏布局,可拖拽操作、支持 ROOT 权限、多媒体浏览器、压缩包支持,Chromecast 流支持等众多功…

AdsPower 的功能到底好不好用?一文详解,真实揭露

你一定听说过AdsPower、Multilogin、dolphin、vmlogin浏览器、紫鸟、悦互联等等这些常见的指纹浏览器软件吧!其中,AdsPower浏览器作为一款跨境圈里的“明星指纹浏览器”,号称具备许多功能,这就让许多跨境人对这个浏览器充满好奇&a…

jdk11缺少jre的问题解决

问题:升级jdk的时候文件中缺少jre,导致项目启动报错 jdk11不在默认用户强制安装jre,所以jdk包中不在包含jre文件 解决步骤1:进入jdk安装包的根目录,输入cmd 解决步骤2:在cmd中输入以下命令 bin\jlink.e…

Jacoco代码覆盖率为0问题排查

目录 原因解决通过IDEA的TestMe重新生成测试类eclipse生成测试类JUnit Test Suite 其它查看覆盖率覆盖catch代码 我问GPT 整jacoco有意义嘛 前几天解决了无法生成jacoco.exec执行文件问题后,发现编写测试类好像无效,代码覆盖率全为0 原因 通过eclipse直…

谈一下开放电商数据接口的存在意义

随着互联网的迅速发展,电子商务(E-commerce)已经成为了现代社会中不可或缺的一部分。人们越来越喜欢在网上购物,电商平台也开始成为许多商家扩大销售渠道的利器。而为了更好地满足用户需求和提升整个电商行业的效率,开…

《MySQL》索引

文章目录 前提知识索引定义和结构理解数据文件结构B树结构来存储数据的优势索引分类 索引操作拓展知识索引覆盖复合索引全文索引 前提知识 下面例子都以Innodb为例 数据是存储在磁盘上的,MySQL是一款专门管理数据的软件。既然MySQL要管理数据,而数据又在…

浮层展示信息位置处理

效果图 代码 <template><div><ul class"info-wrap"><liv-for"(item, index) in list":key"item.id"class"info-item"><div class"base-info"mouseenter"showDetailInfo($event, index)&qu…

【微信小程序-uniapp】CustomDialog 居中弹窗组件

1. 效果图 2. 组件完整代码 <template><uni-popup :ref="ref" type="center" @change