结构体详解

结构体:

一系列具有相同类型或不同类型的数据构成的数据集合,也叫结构

结构体可以用来封装一些属性来组成新的类型。

结构体的大小:

结构体的大小不是结构体元素单纯相加。内存对齐(若计算机使用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 变量而不向其传递任何参数时,提供默认值:

cpp 复制代码
struct Employee
{
    string name;    // 员工姓名
    int vacationDays,    // 允许的年假
    daysUsed;    //已使用的年假天数
    Employee (string n ="",int d = 0)    // 构造函数
    {
        name = n;
        vacationDays = 10;
        daysUsed = d;
    }
};
相关推荐
火山灿火山1 分钟前
Qt信号和槽
开发语言·qt
生产队队长4 分钟前
Database:Linux环境中的Oracle修改密码
linux·数据库·oracle
CheungChunChiu4 分钟前
Linux 下 Realtek WiFi/BT 二合一模组详解
linux·ubuntu
k8s-open6 分钟前
解决“Argument list too long”错误:curl参数过长的优雅处理方案
linux·前端·chrome·ssh
这样の我7 分钟前
java 模拟chrome tls指纹
java·开发语言·chrome
攒钱植发7 分钟前
嵌入式Linux——开发踩坑记:从 WebSocket 死锁到 PortAudio 音频丢包的硬核调试
linux·websocket·音视频
枸杞CN7 分钟前
Ubuntu设置静态网络IP
linux·运维·服务器
赖small强8 分钟前
【Linux驱动开发】Linux Sysfs 虚拟文件系统深度解析与实战指南
linux·驱动开发·sysfs·kobject·sysfs 映射·/sys/devices
m0_661279188 分钟前
学习笔记-安装并启动 Jupyter Noteboo
开发语言·python
代码or搬砖8 分钟前
常见的五个编译时异常和常见的五个编译时异常
开发语言·php