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

结构体详解

结构体:

一系列具有相同类型或不同类型的数据构成的数据集合,也叫结构
结构体可以用来封装一些属性来组成新的类型。

结构体的大小:

结构体的大小不是结构体元素单纯相加。内存对齐(若计算机使用32位字长的cpu,对32位的cpu而言,取四个字节的数要比取一个字节的数更高效。因此在结构体中每个成员的首地址都是4的整数倍,取数据元素时会更高效,也更方便)
每个特定平台上的编译器都有自己默认“对齐系数”(对齐模数)
程序员可以通过预编译命令#pragmapack(n),n=1,2,4,8,16来改变这一系数,n就是对齐系数

C语言结构体对齐步骤:

1.结构体各成员对齐
2.结构体总体对齐

C语言结构体对齐规则:

1.结构体(struct)的数据成员,第一个数据成员存放的地址为结构体偏移量为0的地址处
2.其它结构体成员自身对齐时,存放的地址为min{有效对齐值为自身对齐值,指定对齐值}的最小整数倍的地址处
自身对齐值:结构体变量里每个成员的自身大小
指定对齐值:有宏#pragma pack(N)指定的值N一定是2的幂次方。如1,2,4,8,16等。
如果没有定义宏,32位主机上默认指定对齐值为4,64位默认对齐值为8,ARM CPU默认指定对齐值为8;
有效对齐值:结构体成员自身对齐时有效对齐值为自身对齐值与指定对齐值中较小的一个
3.总体对齐:字节大小是min{所有成员中自身对齐值最大的,指定对齐值}的整数倍

构造函数初始化结构体

1.为什么要使用构造函数初始化结构体
a.如果有某个成员未被初始化,那么在这种情况下,跟随在该成员后面的成员都不能初始化
b.如果结构体包括任何诸如字符串之类的对象,那么在许多编译器上将无法运行
因此可以使用构造函数来初始化结构体成员变量,与初始化类成员变量相同。

以下是一个名为 Employee 的结构体的声明语句,它包含一个具有两参数的构造函数,以便在创建一个 Employee 变量而不向其传递任何参数时,提供默认值:

struct Employee
{string name;    // 员工姓名int vacationDays,    // 允许的年假daysUsed;    //已使用的年假天数Employee (string n ="",int d = 0)    // 构造函数{name = n;vacationDays = 10;daysUsed = d;}
};
http://www.lryc.cn/news/272377.html

相关文章:

  • 前端开发个人简历范本(2024最新版-附模板)
  • # 编程语言简史
  • SpringMVC学习与开发(三)
  • JAVA对象、List、Map和JSON之间的相互转换
  • 图像分割-漫水填充法 floodFill
  • Python open函数详解:打开指定文件与 readline和readlines函数:按行读取文件
  • Vue 生命周期有哪些?作用是什么?
  • 《Vue3 前端构建工具》 Vue-cli 与 Vite 创建项目的插件和配置对比
  • springboot(ssm中山社区医疗综合服务平台 医疗管理系统 Java系统
  • Qt编写的exe程序上添加程序信息
  • (一)CarPlay集成开发之概述与环境篇
  • js文件上传 分片上传/断点续传/极速秒传
  • mysql 通过 binglog 恢复数据
  • 【REST2SQL】01RDB关系型数据库REST初设计
  • 图像识别原理
  • 共识算法介绍
  • Gen-AI 的知识图和分析(无需图数据库)
  • flutter 安卓使用高德插件黑屏
  • Java:表单生成excel文档 poi 通用
  • 使用Apache Commons SCXML实现状态机管理
  • 大数据技术原理与应用期末考试题
  • 解决jenkins的Exec command命令不生效,或者执行停不下来的问题
  • 【PHP】json_decode的第二个参数是什么意思
  • 学生公寓安全用电管理系统应用案例
  • python实现简易的flask后端接口
  • CSDN质量分批量查询
  • 【MPC学习笔记】01:MPC简介(Lecture 1_1 Unconstrained MPC)
  • c语言结构体学习上篇
  • Linux: eBPF: bcc-tools:tcpdrop使用需要注意的问题
  • AI:113-基于卷积神经网络的图像风格迁移