| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> 【C语言】??自定义类型(结构体+位段+枚举+联合体)【建议收藏】 -> 正文阅读 |
|
[C++知识库]【C语言】??自定义类型(结构体+位段+枚举+联合体)【建议收藏】 |
目录 一、结构体为什么会有结构体呢?我们前面所学到的那些数据类型:char,int,double,还有指针都是不足以去表达对象,如果我们要去表示一个人,能用一个数字去表示吗?肯定是不行的,要知道人是属于复杂对象,不能简单的用某个数来表示,要表示一个人,需要很多方面,比如姓名,性别,年龄等。要表示人,我们就得创造一种复杂类型,C语言里面就有了结构体类型 结构体是C语言中特别重要的知识点,结构体使得C语言有能力描述复杂类型 结构体类型也是需要字己创建的 结构体的声明结构的基础知识结构是一些值的集合,这些值称为成员变量,结构的每个成员可以是不同类型的变量 结构体的声明描述一个人: 方式1:
?方式2:
方式3(匿名结构体类型)
结构体的自引用我们在用结构体的时候能不能在声明结构体的时候在结构体里面写这个结构体 如下代码:
正确写法
在该结构体里面放同类型的结构体指针 结构体变量的定义和初始化如何定义结构体变量,请看如下代码: 代码1:
代码2(创建出全局结构体变量)
结构体成员的访问1.? 结构体对象.结构体成员如下代码,通过结构体变量名/标签对结构体成员进行访问
运行结果: ?2.结构体指针->结构体成员?如下代码:通过结构体指针来访问结构体成员
运行结果: 结构体传参??结构体传参分为传值和传地址 1.传值 如下代码:
这是直接将整个结构体传了过去 2.传址
将结构体的地址传过去
结构体内存对齐如果我们要计算一个结构体的内存大小,该怎么算呢?? 是直接将所有的成员变量的内存大小相加吗? 首先请看如下代码:
?这里创建结构体变量p之后求这个结构体的大小,是1+4==5吗 运行结果: ?打印结果是8,那显然说明结构体的大小并不是简单的成员变量相加,那么这个8是怎么来的呢?这就涉及到了结构体内存对齐 ?对齐规则
那么现在就可以利用对齐规则来求结构体大小了
通过画图来看 ?所以这个结构体的大小就是8 为什么存在内存对齐?
所以结构体内存对齐就是拿空间来换取时间 那在设计结构体的时候,我们既要满足对齐,又要节省空间,让占用空间小的成员尽量集中在一起 修改默认对齐数刚才我们在前面说过VS编译器的默认对齐数是8,但其实这个默认对齐数是可以修改的 结构在对齐方式不合适的时候,我么可以自己更改默认对齐数
如下代码:
注意:这个默认对齐数不能随意修改,所修改的值必须是2^n? (n==0,1,2,3……) 二、位段什么是位段C语言允许在一个结构体中以位为单位来指定其成员所占内存长度,这种以位为单位的成员称为“位段”或称“位域”( bit field) 。利用位段能够用较少的位数存储数据 如下:
从代码可以看出位段的声明和结构体很类似,冒号后面的数字表示该成员的大小(单位bit),有两个不同:
那么这个位段的大小是多少呢? 是2+3+5+10个bit吗?肯定不是的,通过代码来测试一下
运行结果: ??那么这12byte是怎么来的呢?? ? ? 接下来看位段的内存分配 位段的内存分配
前面的代码中位段的声明中有4个int类型的变量,本来应该是要占用16个字节的空间的,但是在使用位段之后只占用了12个字节,计算方式如下:
位段的跨平台问题
位段的应用在我们平时要去发个hello消息给朋友的时候,不仅仅是发了hello,而是把hello和其他的数据捆绑在一起发送的,比如这消息是谁发的,发给谁,目标ip地址信息等,但是这些信息有的可能只需要几个bit就能存下,全部用int的话就太浪费了,这样也会使影响网络状况,这种情况就用位段 三、枚举常量什么是枚举?枚举就是一一列举的意思,把可能的取值都列举出来 比如颜色,星期,月份这些都是可以列举出来的,C语言中就将我们想要的某一类型的值定义成枚举类型,并且让他们的值也可以一一列举出来 枚举类型的定义比如现在将三原色列举出来
?{}中的内容是枚举类型的可能取值,也叫枚举常量 值是多少?那么这里面的值都分别是多少呢?? 如下代码:
打印结果:
可以这么使用:
枚举类型的优点
四、联合(共用体)联合类型的定义联合也是一种特殊的自定义类型 这种类型定义的变量也包含一系列的成员,特征是这些成员公用同一块空间(所以联合也叫共用体) 联合类型的声明如下代码:
那么这里的联合体大小是多少呢?
----------------------------------------------------------------- -----------C语言浮点数在内存中的存储完结--------- 关于C语言,每个知识点后面都会单独写博客更加详细的介绍 欢迎大家关注!!! 一起学习交流 !!! 让我们将编程进行到底!!! --------------整理不易,请三连支持------------------ |
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/29 19:30:02- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |