结构体详解

结构体:

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

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

结构体的大小:

结构体的大小不是结构体元素单纯相加。内存对齐(若计算机使用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;
    }
};
相关推荐
律宏阔4 小时前
WSL Docker 端口明明空闲,但就是绑不上端口
linux·windows
律宏阔4 小时前
WSL 突然断网,无法 ping 内网或外网
linux·windows
穷人小水滴4 小时前
用容器编译 VirtualBox 虚拟机软件 (ArchLinux, podman)
linux·容器·virtualbox
乱码三千5 小时前
如何优雅地直连无公网 IP 的远程 GPU 服务器
linux·人工智能·程序员
yunwei375 小时前
使用 eBPF 跟踪 Nginx 请求
linux·后端·性能优化
yunwei375 小时前
使用 eBPF 跟踪 MySQL 查询
linux·后端·性能优化
yunwei375 小时前
eBPF 示例教程:使用 XDP 捕获 TCP 信息
linux·后端·性能优化
codigger5 小时前
ObjectSense:一门千行内核、把可靠性写进骨子里的面向对象脚本语言
开发语言·编程·编程语言
GeW5 小时前
制造业高端化,为什么必须重估Linux和数据库?
linux
GeW5 小时前
工业场景中的Linux与数据库选型:高端化转型的技术底座
linux