结构体类型,结构体变量的创建和初始化 以及结构中存在的内存对齐

news/2024/10/20 5:30:06/

一般结构体类型的声明


struct  结构体类型名
{
member-list; //成员表列


}variable-list;  //变量表列
 

例如描述⼀个学⽣:
struct Stu
{
char name[20];  //名字
int age; //年龄
char sex[5];  //性别
};

//结构体变量的初始化

int main()

{

Stu s = {"张三”,18,“男”};

}

//匿名结构体:在声明时不添加结构体类型名

ex1:

struct 

{

int i;

char c;

}x;

匿名的结构体类型,如果没有对结构体类型重命名的话,基本上只能使⽤⼀次。
 

3.通过结构体内存对齐来计算结构体的大小

1.结构体的第⼀个成员对⻬到和结构体变量起始位置偏移量为0的地址处
2.其他成员变量要对⻬到某个数字(对⻬数)的整数倍的地址处。
对⻬数=编译器默认的⼀个对⻬数与该成员变量⼤⼩的较⼩值。

VS 中默认的值为 8 
Linux中gcc没有默认对⻬数,对⻬数就是成员⾃⾝的⼤⼩
3.结构体总⼤⼩为最⼤对⻬数(结构体中每个成员变量都有⼀个对⻬数,所有对⻬数中最⼤的)的
整数倍。
4.如果嵌套了结构体的情况,嵌套的结构体成员对⻬到⾃⼰的成员中最⼤对⻬数的整数倍处,结构
体的整体⼤⼩就是所有最⼤对⻬数(含嵌套结构体中成员的对⻬数)的整数倍

 

结构体s的大小:

c1:char类型字节为1,vs默认为8,对齐数就是1

i: int类型字节大小为4,vs默认为8,对齐数即为4

c2同理

在内存存储中:第一个成员储存在地址为0的地址中,如下图(左上)

对于第二个类型int,它要对齐在它的对齐数整数倍的位置上,跳过3个字节,从4开始,向下数4个地址,刚好8个字节,是4的整数倍

最后一个char占一个字节,在地址8上,此时结构体总大小应为成员中最大对齐数大的整数倍,最大对齐数为4,此时占9个字节,不满足,跳过4个字节,到达第12个字节处满足4的整数倍

故s的大小为12.

s2 s3 s4同理(右下为s3)

s4如下图:


http://www.ppmy.cn/news/1401773.html

相关文章

CKS之安全沙箱运行容器:gVisor

目录 一、gVisor介绍 二、gVisor架构 三、gVisor使用前置条件 四、Docker中使用gVisor 五、containerd中使用gVisor 六、Kubernetes结合gVisor使用 一、gVisor介绍 gVisor是Google开源的一种容器沙箱技术,其设计初衷是在提供较高安全性的同时,尽量…

H5小程序视频方案解决方案,实现轻量化视频制作

对于许多企业而言,制作高质量的视频仍然是一个技术门槛高、成本高昂的挑战。针对这一痛点,美摄科技凭借其深厚的技术积累和创新能力,推出了面向企业的H5/小程序视频方案解决方案,为企业提供了一种轻量化、高效、便捷的视频制作方式…

【Python笔记-FastAPI】定时任务实现(APScheduler)

目录 一、常见触发器 (一) DateTrigger (二) IntervalTrigger (三) CronTrigger (四) CombinationTrigger 二、代码示例 (一) task_scheduler.py (二) client.py 三、调用说明 (一) 注册任务 (二) 查询任务 (三) 删除任务 实现功能: 定时任务注册、修改、删除、查…

创业项目开发(持续更新)

最近项目梳理: 一、业务目标 最重要的业务目标就是要能实现自己做事情赚钱。所以有两个维度,第一个维度就是最重要的就是自己做事情。第二个维度才是赚钱。 如果要自己做事情,需要什么样的事情,这个事情的目标是什么&#xff0…

第九届蓝桥杯大赛个人赛省赛(软件类)真题C 语言 A 组-分数

solution1 直观上的分数处理 #include <iostream> using namespace std; int main() {printf("1048575/524288");return 0; }#include<stdio.h> #include<math.h> typedef long long ll; struct fraction{ll up, down; }; ll gcd(ll a, ll b){if…

OpenHarmony error: signature verification failed due to not trusted app source

问题&#xff1a;error: signature verification failed due to not trusted app source 今天在做OpenHarmony App开发&#xff0c;之前一直用的设备A在测试开效果&#xff0c;今天换成了设备B&#xff0c;通过DevEco Studio安装应用程序的时候&#xff0c;就出现错误&#xf…

基于SpringBoot的“校园台球厅人员与设备管理系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“校园台球厅人员与设备管理系统”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 系统首页界面图…

RIP环境下的MGRE 综合实验

实验题目及要求&#xff1a; 1.R5为ISP&#xff0c;只能进行IP地址配置&#xff0c;其所有地址均配为公有IP地址 2.R1和R5间使用PPP的PAP认证&#xff0c;R5为主认证方; R2于R5之间使用PPP的chap认证&#xff0c;R5为主认证方&#xff1b; R3于R5之间使用HDLC封装。 3.R1/…