ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C++教程第三部分

2021-05-16 20:01:48  阅读:111  来源: 互联网

标签:教程 变量 成员 数据类型 C++ 第三 类型 对齐 结构


一.前言

本文将使用最快的方法过完C++。由于是快速阅览,本文不会描述过多的详细知识,如何深入还需要各位努力;不过学习过了一遍内容后,再学习C++也会较为容易。

76b6affb5d973548e90dd8ff2040d91e.png更多详细进阶教程可以关注微信公众号  “C和C加加”  回复“ZXC”即可免费获取

二.自定义数据类型

1.结构体

结构体可以包含不同数据类型的结构。

定义结构体的一般形式

5dc040118fa1c557ec3dd87cb85308d0.png

结构体变量名的定义和初始化:

2c321e51476b505b42f4c422d037a76f.png

1738578404224b40b83012539cbd64fd.png

结构体变量的使用:

具有相同类型的结构体变量可以进行赋值运算,但是不能输入输出

对结构体变量的成员引用:结构体变量名.成员名

指向结构体的指针变量引用格式:指针变量名->成员名;

结构体数组的定义,初始化和使用与结构体变量、基本类型数组相似

c8313550ce3b017fa90008ef3aa9eb25.png

结构体作为函数传递有三种:值传递,引用传递,指针传递

2.结构体大小和字节对齐

现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特 定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐.

为什么需要字节对齐?各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能从某些特定地址开始存取。比如有些平台每次读都是从偶地址开始,如果一个int型(假设为32位系统)如果存放在偶地址开始的地方,那么一个读周期就可以读出这32bit,而如果存放在奇地址开始的地方,就需要2个读周期,并对两次读出的结果的高低字节进行拼凑才能得到该32bit数据。

三个概念:

自身对齐值:数据类型本身的对齐值,结构体或类的的自身对齐值是其成员中最大的那个值,例如char类型的自身对齐值是1,short类型是2;

指定对齐值:编译器或程序员指定的对齐值,32位单片机的指定对齐值默认是4;

有效对齐值:自身对齐值和指定对齐值中较小的那个。

字节对齐的三个准则

结构体变量的首地址能够被其有效对齐值的大小所整除

结构体的总大小为结构体有效对齐值的整数倍。

结构体每个成员相对于结构体首地址的偏移量都是有效对齐值的整数倍。

可以通过#pragma pack(n)来设定变量以n字节对齐方式

举个例子

23756ae7eb679559fa3881d3acef76de.png

e539ca7ca756c6864d86d687405453f9.png

b2f06a3476682321d05f449c68f56f0c.png

3.公用体(union)

几个不同的变量共享同一个地址开始的内存空间。

成员类型可以是基本数据类型,也可以是构造数据类型。

公用体变量初始化时,只能对第一个成员赋值。

公用体变量所占的内存长度等于最长的成员长度。

公用体变量在一个时刻只能一个成员发挥作用,赋值时,成员之间会互相覆盖,最后一次被赋值的成员起作用。

定义

5b117631646ca8ef58f413a5407822e9.png

初始化

04aa2eaae07aac68272bfb86fb81589a.png

引用

48dbd8202bb0bde6bbe64ff08a073dec.png

4.枚举(enum)和typedef声明

枚举已经在前面的章节介绍过,这里就不在赘述了。

typedef-为已存在的数据类型定义一个新的类型名称,不能定义变量。

typedef声明格式:typedef 类型名称 类型标识符;

40d493886718e3602fffc996dead1fb5.png

5.更多详细进阶教程可以关注微信公众号  “C和C加加”  回复“ZXC”即可免费获取

未完待续!!!!

image.png

标签:教程,变量,成员,数据类型,C++,第三,类型,对齐,结构
来源: https://blog.51cto.com/u_15174292/2779695

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有