结构体详解

结构体:

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

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

结构体的大小:

结构体的大小不是结构体元素单纯相加。内存对齐(若计算机使用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;
    }
};
相关推荐
plus4s3 分钟前
2月15日(78,80,81题)
c++·算法·图论
光泽雨21 分钟前
C# 中 Assembly 类详解
开发语言·c#
少控科技31 分钟前
C#基础训练营 - 02 - 运算器
开发语言·c#
CCPC不拿奖不改名44 分钟前
虚拟机基础:在VMware WorkStation上安装Linux为容器化部署打基础
linux·运维·服务器·人工智能·milvus·知识库搭建·容器化部署
Riemann~~1 小时前
C语言嵌入式风格
c语言·开发语言
一只自律的鸡3 小时前
【Linux系统编程】文件IO 函数篇
linux·linux系统编程
zmzb01033 小时前
C++课后习题训练记录Day104
开发语言·c++
honiiiiii3 小时前
SMU winter week4
c++
zmzb01034 小时前
C++课后习题训练记录Day105
开发语言·c++·算法
wjs20244 小时前
Vue3 条件语句
开发语言