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

自定义类型:结构体进阶

一、结构体类型的声明

前⾯我们在学习操作符和初阶结构体的时候,已经学习了结构体的知识,这⾥稍微复习⼀下。

1.1结构体的回顾

结构是⼀些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。

1.2结构的声明

struct tag(结构体标签)
{member-list;
}variable-list;

例如描述一个学生:

struct Stu
{char name[20];//名字 int age;//年龄 char sex[5];//性别char id[20];//学号
};//分号不能丢 

1.3结构体变量的创建和初始化

struct Point  //类型声明
{int x;int y;
}p1 = { 10,20 };//声明类型的同时创建变量p1并初始化struct Point p2 = { 0,0 };struct S
{int num;char ch;struct Point p;float d;
};int main()
{struct Point p3 = { 1,2 };//按照结构体成员的顺序初始化struct S s = { 100,'w',{2,5},3.14f };//结构体嵌套初始化//按照指定的顺序初始化 struct S s2 = { .d = 1.2f,.p.x = 3,.p.y = 5,.ch = 'q',.num = 200 };printf("%d %c %d %d %f\n", s.num, s.ch, s.p.x, s.p.y, s.d);printf("%d %c %d %d %f\n", s2.num, s2.ch, s2.p.x, s2.p.y, s2.d);return 0;
}

1.4结构的特殊声明

在声明结构的时候,可以不完全的声明。

匿名结构体类型(只能使用一次)

只能使用一次的意思是:在定义时一次性声明1个或者多个变量,但后续无法再新增变量

下面两个结构体在声明的时候省略掉了结构体标签(tag)

struct
{int a;char b;float c;
}x;
struct
{int a;char b;float c;
}a[20],*p;

在上⾯代码的基础上,下⾯的代码合法吗?

p = &x;

匿名结构体的类型没有名字,因此每次定义(即使成员完全相同)都会被视为一个全新的类型;编译器会把上⾯的两个声明当成完全不同的两个类型,所以是⾮法的。 匿名的结构体类型,如果没有对结构体类型重命名的话,基本上只能使⽤⼀次。

如果使用 typedef 为匿名结构体重命名,则生成一个可复用的类型名,可以自由创建多个变量:

typedef struct
{int a;char b;float c;
}X;X p1,p2,p3;// 合法,可无限创建

此时 X 是一个完整的类型名,与内置类型(如 int)用法一致。

1.5结构的自引用

在结构中包含⼀个类型为该结构本⾝的成员是否可以呢?

⽐如,定义⼀个链表的节点:

struct Node
{int data;struct Node next;
};

 上述代码正确吗?如果正确,那 sizeof(struct Node) 是多少?

仔细分析,其实是不⾏的,因为⼀个结构体中再包含⼀个同类型的结构体变量,这样结构体变量的大小就会⽆穷的⼤,是不合理的。

正确的自引用方式:

struct Node
{int data;struct Node* next;//指向下一个节点的地址
};

  结构体在编译时需要确定大小,直接包含自身会导致无限递归,无法确定内存大小使用指针(固定大小,指针大小4/8字节)就可以确定大小(使用指针自引用是唯一可行方案)

在结构体⾃引⽤使⽤的过程中,夹杂了 typedef 对匿名结构体类型重命名,也容易引⼊问题,看看 下⾯的代码,可⾏吗? 

typedef struct
{int data;Node* next;
}Node;

答案是不⾏的,因为Node是对前⾯的匿名结构体类型的重命名产⽣的,但是在匿名结构体内部提前使 ⽤Node类型来创建成员变量,这是不⾏的。

解决⽅案如下:定义结构体不要使⽤匿名结构体了:

typedef struct Node
{int data;struct Node* next;
}Node;

二、结构体内存对齐

我们已经掌握了结构体的基本使⽤了。 现在我们深⼊讨论⼀个问题:计算结构体的大小

2.1对齐规则

1.结构体的第⼀个成员对⻬到和结构体变量起始位置偏移量为0的地址处

2.其他成员变量要对⻬到某个数字(对⻬数)的整数倍的地址处。

      对⻬数=编译器默认的⼀个对⻬数与该成员变量⼤⼩的较⼩值。

      VS 中默认的值为 8 、Linux中gcc没有默认对⻬数,对⻬数就是成员⾃⾝的⼤⼩

3.结构体总⼤⼩为最⼤对⻬数(结构体中每个成员变量都有⼀个对⻬数,所有对⻬数中最⼤的)的 整数倍。

4.如果嵌套了结构体的情况,嵌套的结构体成员对⻬到⾃⼰的成员中最⼤对⻬数的整数倍处,结构 体的整体⼤⼩就是所有最⼤对⻬数(含嵌套结构体中成员的对⻬数)的整数倍。

练习1:

struct S1
{char c1;int i;char c2;
};
int main()
{printf("%d\n",sizeof(struct S1));//12return 0;
}

我们可以进一步验证:

offsetof函数主要用于计算结构体成员在内存中的偏移量‌。它定义在C语言的stddef.h头文件中,接受两个参数:type(结构体类型)和member(结构体中的成员名)。offsetof函数的返回值类型为size_t,表示结构体成员相对于结构体起始地址的偏移量‌(以字节为单位)

#include <stddefe.h>
struct S1
{char c1;int i;char c2;
};
int main()
{printf("%d\n",offsetof(struct S1,c1));//0printf("%d\n",offsetof(struct S1,i));//4 ---- 与0偏移处之间的距离为4printf("%d\n",offsetof(struct S1,c2));//8return 0;
}

练习2:

struct S2
{char c1;char c2;int i;
};
printf("%d\n", sizeof(struct S2));

由练习1和练习2对比可知,结构成员相同的结构体,练习2的写法更节省空间

练习3:

struct S3
{double d;char c;int i;
};
printf("%d\n", sizeof(struct S3));

练习4:

struct S
{int a;char c[5];double d;
};
int main()
{printf("%d\n",sizeof(struct S));//24return 0;
}

练习5:结构体嵌套问题 

struct S3
{double d;char c;int i;
};
struct S4
{char c1;struct S3 s3;double d;
};
printf("%d\n", sizeof(struct S4));

2.2 为什么存在内存对齐

1. 平台原因(移植原因):不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址处取某些特定 类型的数据,否则抛出硬件异常。

2. 性能原因: 数据结构(尤其是栈)应该尽可能地在⾃然边界上对⻬。原因在于,为了访问未对⻬的内存,处理器需要 作两次内存访问;⽽对⻬的内存访问仅需要⼀次访问。假设⼀个处理器总是从内存中取8个字节,则地 址必须是8的倍数。如果我们能保证将所有的double类型的数据的地址都对⻬成8的倍数,那么就可以 ⽤⼀个内存操作来读或者写值了。否则,我们可能需要执⾏两次内存访问,因为对象可能被分放在两个8字节内存块中。

总体来说:结构体的内存对⻬是拿空间来换取时间的做法。

那在设计结构体的时候,我们既要满⾜对⻬,⼜要节省空间,如何做到:

让占⽤空间⼩的成员尽量集中在⼀起 ------ 例如练习1和2中练习2的写法更节省空间

2.3 修改默认对齐数

#pragma 这个预处理指令,可以改变编译器的默认对⻬数(VS 默认对齐数是8)

#pragma pack() --> 设置默认对齐数

结构体在对齐方式不合适的时候,我们可以⾃⼰更改默认对⻬数:

#pragma pack(1)
struct S1
{char c1;int i;char c2;
};#pragma pack();//将对齐数1重新改回默认对齐数8int main()
{printf("%d\n",sizeof(struct S1));//6return 0;
}

三、结构体传参

struct S
{int data[1000];int num;
};
struct S s = {{1,2,3,4}, 1000};
//结构体传参 
void print1(struct S s)
{printf("%d\n", s.num);
}
//结构体地址传参 
void print2(struct S* ps)
{printf("%d\n", ps->num);
}
int main()
{print1(s); //传结构体 print2(&s); //传地址 return 0;
}

结构体传参的时候,要传结构体的地址

原因: 函数传参的时候,参数是需要压栈,会有时间和空间上的系统开销。 如果传递⼀个结构体对象的时候,结构体过⼤,参数压栈的的系统开销⽐较⼤,所以会导致性能的下降。

四、结构体实现位段

4.1 什么是位段

位段 - 位 - 二进制位

段的声明和结构是类似的,有两个不同:

1. 位段的成员必须是 int、unsigned int 或signed int(可以是char) ,在C99中位段成员的类型也可以选择其他类型。

2. 位段的成员名后边有⼀个冒号和⼀个数字

struct A
{int _a:2;int _b:5;int _c:10;int _d:30;
};
int main()
{printf("%d\n",sizeof(struct A));//8return 0;
}

A就是⼀个位段类型。那位段A所占内存为什么是8呢?

4.2 位段的内存分配

1. 位段的成员可以是 int unsigned int signed int 或者是 char 等类型

2. 位段的空间上是按照需要以4个字节( int )或者1个字节( char )的⽅式来开辟的

3. 位段涉及很多不确定因素,位段是不跨平台的,注重可移植的程序应该避免使⽤位段。

一个例子:

struct S
{char a:3;  //01100010(0x62)char b:4;  //00000011(0x03)   ----- > 3个字节char c:5;  //00000100(0x04)char d:4;
};
int main()
{struct S s = {0};s.a = 10;s.b = 12;s.c = 3;s.d = 4;printf("%d\n",sizeof(struct S));//3return 0;
}

空间是如何开辟的?

4.3 位段跨平台问题

1. int位段被当成有符号数还是⽆符号数是不确定的。 

2. 位段中最⼤位的数⽬不能确定。(16位机器最⼤16,32位机器最⼤32,写成27,在16位机器会 出问题。

3. 位段中的成员在内存中从左向右分配,还是从右向左分配,标准尚未定义。

4. 当⼀个结构包含两个位段,第⼆个位段成员⽐较⼤,⽆法容纳于第⼀个位段剩余的位时,是舍弃 剩余的位还是利⽤,这是不确定的。

总结: 跟结构相⽐,位段可以达到同样的效果,并且可以很好的节省空间,但是有跨平台的问题存在。

4.4 位段使用的注意事项

位段的⼏个成员共有同⼀个字节这样有些成员的起始位置并不是某个字节的起始位置,那么这些位 置处是没有地址的。内存中每个字节分配⼀个地址,⼀个字节内部的bit位是没有地址的。

所以不能对位段的成员使⽤&操作符,这样就不能使⽤scanf直接给位段的成员输⼊值,只能是先输⼊放在⼀个变量中,然后赋值给位段的成员。

struct A
{int _a : 2;int _b : 5;int _c : 10;int _d : 30;
};
int main()
{struct A sa = { 0 };//scanf("%d", &sa._b);//这是错误的 //正确的⽰范 int b = 0;scanf("%d", &b);sa._b = b;return 0;
}

相关文章:

自定义类型:结构体进阶

一、结构体类型的声明 前⾯我们在学习操作符和初阶结构体的时候&#xff0c;已经学习了结构体的知识&#xff0c;这⾥稍微复习⼀下。 1.1结构体的回顾 结构是⼀些值的集合&#xff0c;这些值称为成员变量。结构的每个成员可以是不同类型的变量。 1.2结构的声明 struct tag…...

linux perf top分析系统性能

1,看到内核宏是否支持perf功能 perf top -g 查看linux 内核宏定义 CONFIG_PERF_EVENTS=y CONFIG_HAVE_PERF_EVENTS=y CONFIG_FRAME_POINTER=y # 确保帧指针支持以捕获完整堆栈 2,使用perf top -g 报错 Access to performance monitoring and observability operations is l…...

串口屏调试 1.0

http://wiki.tjc1688.com 先把商家的链接贴过来 淘晶驰T1系列3.2寸串口屏tft液晶屏显示屏HMI触摸屏超12864液晶屏 这是主包的型号 打开这个玩意 有十个基本的功能区 新建工程 在界面的右边&#xff0c;指令一定要写在page前面&#xff0c;这里的波特率等等什么的都可以…...

Python面向对象编程:初识类与对象

面向对象编程(OOP)是Python编程中最重要的范式之一。本文将从零开始介绍Python中类和对象的基本概念&#xff0c;帮助初学者快速掌握面向对象编程的核心思想。 一、什么是面向对象编程&#xff1f; 面向对象编程(Object-Oriented Programming)是一种以"对象"为核心…...

局域网常用的测速工具,Iperf3使用教程

目录 下载方式 Windows Linux 使用方法&#xff1a;测试局域网带宽 步骤一&#xff1a;服务端准备 步骤二&#xff1a;客户端发起连接 步骤三&#xff1a;查看结果 参数说明 1. Iperf常用参数&#xff08;测试够用&#xff09; 2. 通用参数&#xff08;Server端和Cli…...

[架构之美]linux常见故障问题解决方案(十九)

[架构之美]linux下常见故障问题解决方案 一&#xff0c;文本文件忙 问题一&#xff1a;rootwh-VMware-Virtual-Platform:/home/hail# cp /root/containerd/bin/* /usr/bin/ cp: 无法创建普通文件 ‘/usr/bin/containerd’: 文本文件忙 在Linux系统中遇到“文本文件忙”错误时…...

Java与Go语言对比教程

Java vs. Go&#xff1a;程序员的双节棍与瑞士军刀之战 &#x1f3af; 先看一张灵魂对比图 &#x1f916; Java老大哥 &#x1f680; Go小钢炮 出生年份 1995&#xff08;中年稳健&#xff09; 2009&#xff08;年轻活力&…...

计算机大类专业数据结构下半期实验练习题

1068: 图的按录入顺序深度优先搜索 #include"iostream" using namespace std; #include"cstring" int visited[100]; char s[100]; int a[100][100]; int n; void dfs(int k,int n) {if(visited[k]0){visited[k]1;cout<<s[k];for(int i0;i<n;i){i…...

Android 关闭Activity切换过渡动画

Android 9.0以前关闭过渡动画效果只需要把开发者模式中过渡动画缩放设为0就可以。也就是把def_window_transition_scale改为0% frameworks/base/packages/SettingsProvider/res/values/defaults.xml <fraction name"def_window_transition_scale">100%<…...

iperf3的介绍与舒勇

在 CentOS 7 中使用 iperf3 进行网络性能测试&#xff0c;分为客户端和服务器两部分。以下是使用步骤&#xff1a; 1. 安装 iperf3 首先&#xff0c;你需要在 CentOS 7 上安装 iperf3。可以通过以下命令进行安装&#xff1a; sudo yum install epel-release sudo yum install…...

Python 包管理新选择:uv

在 Python 中,uv 是由 Astral 公司开发的 Rust 高性能包管理工具,旨在替代传统 pip 并提供更快的依赖管理、Python 版本控制等功能。 https://github.com/astral-sh/uv 在 github 上已有 53k star 一、uv 的核心优势 极速性能:比 pip 快 10-100 倍。多版本 Python 管理:支…...

从需求到用例的AI路径:准确率与挑战

用工作流生成测试用例和自动化测试脚本&#xff01; 引言&#xff1a;用例的黄金起点 在软件工程中&#xff0c;“测试用例”是连接需求理解与质量保障之间的关键桥梁。一份高质量的测试用例&#xff0c;不仅是验证功能实现是否符合需求的工具&#xff0c;更是产品风险感知、用…...

JavaSE核心知识点02面向对象编程02-06(泛型)

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 JavaSE核心知识点02面向对象编程02-06&#…...

xml与注解的区别

功能xml配置注解定义bean bean标签 id属性 class属性 Component Controller Service Repository ComponentScan 设置依赖注入 setter注入&#xff08;set方法&#xff09; 构造器注入&#xff08;构造方法&#xff09; Autowired Qualifier Value 配置第三方bean bean标签 静…...

进阶 DFS 学习笔记

字数&#xff1a;12017字。 文章盗的图注明了出处&#xff0c;全部出自 y 总的算法提高课。 不知道为啥这个时候才开始学这个东西&#xff0c;好像是很多同龄人都已经学完了。 进阶 DFS 具体来说好几个东西&#xff0c;所以可能内容有一些些多。 默认 DFS 和 BFS 已经掌握了…...

计算机设计大赛山东省赛区软件开发赛道线上答辩复盘

流程回顾&#xff1a; 1.抽签顺序&#xff1a; 抽签顺序并不一定代表是最终顺序&#xff0c;要注意看通知不要遗漏。 2.答辩形式&#xff1a; 线上答辩&#xff0c;加入腾讯会议&#xff0c;进会议时自己的备注是作品编号&#xff0c;等轮到自己组答辩时主持人会把人拉进来…...

第7次课 栈A

课堂学习 栈&#xff08;stack&#xff09; 是一种遵循先入后出逻辑的线性数据结构。 我们可以将栈类比为桌面上的一摞盘子&#xff0c;如果想取出底部的盘子&#xff0c;则需要先将上面的盘子依次移走。我们将盘子替换为各种类型的元素&#xff08;如整数、字符、对象等&…...

TXT编码转换工具iconv

iconv.exe是实现TXT编码转换的命令行工具&#xff0c;支持几百种编码格式的转换&#xff0c;利用它可以在自主开发程序上实现TXT文档编码的自动转换。 一、命令参数格式 Usage: iconv [-c] [-s] [-f fromcode] [-t tocode] [file ...] or: iconv -l 二、转换的示例 将UTF-8…...

基于Spring Boot + Vue的高校心理教育辅导系统

一、项目背景介绍 随着高校对学生心理健康教育的重视&#xff0c;传统的人工心理辅导与测评模式已经难以满足广大师生的个性化需求。为了提高心理服务的效率、便捷度和覆盖范围&#xff0c;本项目开发了一个高校心理教育辅导系统&#xff0c;集成心理评测、辅导预约、留言交流…...

关于甲骨文(oracle cloud)丢失MFA的解决方案

前两年&#xff0c;申请了一个招商的多币种信用卡&#xff0c;然后就从网上撸了一个oracle的免费1h1g的服务器。 用了一段时间&#xff0c;人家要启用MFA验证。 啥叫MFA验证&#xff0c;类似与短信验证吧&#xff0c;就是绑定一个手机&#xff0c;然后下载一个app&#xff0c;每…...

Linux系统管理与编程17:自动化部署ftp服务

兰生幽谷&#xff0c;不为莫服而不芳&#xff1b; 君子行义&#xff0c;不为莫知而止休。 #virtual用户管理&#xff1a;passerbyA、captain和admin三个虚拟用户 # passerbyA只能看&#xff0c;captain可看读写上传&#xff0c;但不能删除。admin全部权限 [rootshell shell]…...

C++STL——stack,queue

stack与queue 前言容器适配器deque 前言 本篇主要讲解stack与queue的底层&#xff0c;但并不会进行实现&#xff0c;stack的接口 queue的接口 &#xff0c;关于stack与queue的接口在这里不做讲解&#xff0c;因为通过前面的对STL的学习&#xff0c;这些接口都是大同小异的。 …...

HC-SR04超声波测距传感器

1.基本信息 供电电压5v,测量范围2cm~400cm,测量精度正负3mm&#xff0c;超声波频率40khz 2.连接引脚&#xff1a; 3.工作原理 TRIG引脚发送至少10us的高电平信号&#xff0c;ECHO引脚负责接受信号&#xff1b; 接受方式&#xff1a;计算测量高电平持续的时间&#xff0c;从一…...

内存安全暗战:从 CVE-2025-21298 看 C 语言防御体系的范式革命

引言 2025 年 3 月&#xff0c;美国 CERT 发布的《年度漏洞报告》揭示了触目惊心的数据&#xff1a;C/C 相关漏洞占全年高危漏洞的 68%&#xff0c;其中内存安全问题贡献了 92% 的远程代码执行风险。当 CVE-2025-21298 漏洞在某工业控制软件中被利用&#xff0c;导致欧洲某核电…...

Linux笔记---System V共享内存

1. System V共享内存简介 System V共享内存是一种在Linux系统中用于进程间通信的机制。顾名思义&#xff0c;就是申请一段可供多个进程共享的内存&#xff0c;以用于进程间通信&#xff0c;相对于管道机制要更加直接。 1.1 原理 System V共享内存通过创建和使用一个特定的IP…...

MySQL 1366 - Incorrect string value:错误

MySQL 1366 - Incorrect string value:错误 错误如何发生发生原因&#xff1a; 解决方法第一种尝试第二种尝试 错误 如何发生 在给MySQL添加数据的时候发生了下面的错误 insert into sys_dept values(100, 0, 0, 若依科技, 0, 若依, 15888888888, ryqq.com, 0,…...

慈缘基金会“蝴蝶飞”助西藏女孩白玛卓嘎“折翼重生”

历经六个月、178天的艰难治疗&#xff0c;来自西藏拉萨的15岁女孩白玛卓嘎&#xff0c;终于在4月底挺直脊梁&#xff0c;带着自信的笑容踏上了回家的路。这场跨越雪域高原与首都北京的“生命蜕变之旅”&#xff0c;不仅改写了这位藏族少女的人生轨迹&#xff0c;更见证了公益力…...

【生存技能】ubuntu 24.04 如何pip install

目录 原因解决方案说明 在接手一个新项目需要安装python库时弹出了以下提示: 原因 这个报错是因为在ubuntu中尝试直接使用 pip 安装 Python 包到系统环境中&#xff0c;ubuntu 系统 出于稳定性考虑禁止了这种操作 这里的kali是因为这台机器的用户起名叫kali,我也不知道为什么…...

TDengine 在智能制造中的核心价值

简介 智能制造与数据库技术的深度融合&#xff0c;已成为现代工业技术进步的一个重要里程碑。随着信息技术的飞速发展&#xff0c;智能制造已经成为推动工业转型升级的关键动力。在这一进程中&#xff0c;数据库技术扮演着不可或缺的角色&#xff0c;它不仅承载着海量的生产数…...

代码随想录第41天:图论2(岛屿系列)

一、岛屿数量&#xff08;Kamacoder 99&#xff09; 深度优先搜索&#xff1a; # 定义四个方向&#xff1a;右、下、左、上&#xff0c;用于 DFS 中四向遍历 direction [[0, 1], [1, 0], [0, -1], [-1, 0]]def dfs(grid, visited, x, y):"""对一块陆地进行深度…...

C语言复习--柔性数组

柔性数组是C99中提出的一个概念.结构体中的最后⼀个元素允许是未知大小的数组&#xff0c;这就叫做柔性数组成员。 格式大概如下 struct S { int a; char b; int arr[];//柔性数组 }; 也可以写成 struct S { int a; char b; int arr[0];//柔性数组 }; …...

《Python星球日记》 第55天:迁移学习与预训练模型

名人说&#xff1a;路漫漫其修远兮&#xff0c;吾将上下而求索。—— 屈原《离骚》 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 一、迁移学习基础1. 什么是迁移学习&#xff1f;2. 迁移学习的优势3. 迁移学习的…...

Python项目75:PyInstaller+Tkinter+subprocess打包工具1.0(安排 !!)

这个打包工具包含以下功能&#xff1a; 1.主要功能&#xff1a;选择Python脚本文件&#xff0c;设置打包选项&#xff08;单文件打包、无控制台窗口&#xff09;&#xff0c;自定义程序图标&#xff0c;指定输出目录&#xff0c;实时显示打包日志。 2.自适应布局改进&#xff…...

互联网大厂Java面试实录:从基础到微服务的深度考察

互联网大厂Java面试实录&#xff1a;从基础到微服务的深度考察 面试场景 面试官&#xff1a;风清扬&#xff08;严肃且技术深厚&#xff09; 求职者&#xff1a;令狐冲&#xff08;技术扎实但偶尔含糊&#xff09; 第一轮&#xff1a;Java基础与框架 风清扬&#xff1a;令狐…...

学习黑客5 分钟深入浅出理解Linux进程管理

5 分钟深入浅出理解Linux进程管理 &#x1f5a5;️ 大家好&#xff01;今天我们将探索Linux系统中的进程管理——这是理解系统运行机制和进行安全分析的基础知识。在TryHackMe平台上进行网络安全学习时&#xff0c;了解进程如何工作以及如何监控和控制它们&#xff0c;对于识别…...

Kubernetes应用发布方式完整流程指南

Kubernetes&#xff08;K8s&#xff09;作为容器编排领域的核心工具&#xff0c;其应用发布流程体现了自动化、弹性和可观测性的优势。本文将通过一个Tomcat应用的示例&#xff0c;详细讲解从配置编写到高级发布的完整流程&#xff0c;帮助开发者掌握Kubernetes应用部署的核心步…...

JVM——即时编译器的中间表达形式

中间表达形式&#xff08;IR&#xff09;&#xff1a;编译器的核心抽象层 1. IR的本质与作用 在编译原理的体系中&#xff0c;中间表达形式&#xff08;Intermediate Representation, IR&#xff09;是连接编译器前端与后端的桥梁。前端负责将源代码转换为IR&#xff0c;而后…...

Js 判断浏览器cookie 是否启用

验证时 google浏览器 135.0.7049.117 不生效 cookie.html <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><title>Cookie 检测</title> </head> <body><h1>检测是否启用 Cookie<…...

数字相机的快门结构

数字相机(DC/DSLR等)的快门结构和传统相机有所不同,除了机械快门以外,还存在电子快门,实际上是二者的混合体。我写这篇文章大概介绍一下数字相机的快门结构,希望能抛砖引玉。 要讨论数字相机的快门结构,首先先要了解一下数字相机的结构分类,根据成像原理不同,数字相机大…...

LeetCode --- 448 周赛

题目列表 3536. 两个数字的最大乘积 3537. 填充特殊网格 3538. 合并得到最小旅行时间 3539. 魔法序列的数组乘积之和 一、两个数字的最大乘积 由于数据都是正数&#xff0c;所以乘积最大的两个数&#xff0c;本质就是找数组中最大的两个数即可&#xff0c;可以排序后直接找到…...

添加物体.

在cesium中我们可以添加物体进入地图.我们以广州塔为例 //生成广州塔的位置var position2 Cesium.Cartesian3.fromDegrees(113.3191,23.109,100)viewer.camera.setView({//指定相机位置destination: position2, 运行后如图 我们使用cesium官网提供的代码为广州塔在地图上标点…...

ABB电机控制和保护单元与Profibus DP主站转Modbus TCP网关快速通讯案例

ABB电机控制和保护单元与Profibus DP主站转Modbus TCP网关快速通讯案例 在现代工业自动化系统中&#xff0c;设备之间的互联互通至关重要。Profibus DP和Modbus TCP是两种常见的通信协议&#xff0c;分别应用于不同的场景。为了实现这两种协议的相互转换&#xff0c;Profibus …...

Yocto中`${S}`和`${WORKDIR}`的联系与区别

在Yocto项目中,${S}和${WORKDIR}是构建过程中两个核心路径变量,它们的关系及用途如下: 定义与层级关系${WORKDIR}(工作目录) 是Recipe所有任务执行的基础目录,路径结构为: build/tmp/work/<arch>/<recipe-name>/<version>/。 该目录包含源码解压后的所…...

CDGP历次主观题真题回忆

(一)【论述】 1如何设计企业的数据安全体系?活动+方法+DSMM 2如何管理公司混乱的数据质量?活动+遵循原则+建立质量维度+质量改进生命周期+高阶指标。...

Java学习手册:Spring Cloud 组件详解

一、服务发现组件 - Eureka 核心概念 &#xff1a;Eureka 是一个服务发现组件&#xff0c;包含 Eureka Server 和 Eureka Client 两部分。Eureka Server 作为服务注册中心&#xff0c;负责维护服务实例的注册信息&#xff1b;Eureka Client 则是集成在应用中的客户端&#xff0…...

【大模型】使用 LLaMA-Factory 进行大模型微调:从入门到精通

使用 LLaMA-Factory 进行模型微调&#xff1a;从入门到精通 一、环境搭建&#xff1a;奠定微调基础&#xff08;一&#xff09;安装依赖工具&#xff08;二&#xff09;创建 conda 环境&#xff08;三&#xff09;克隆仓库并安装依赖 二、数据准备&#xff1a;微调的基石&#…...

sensitive-word-admin v2.0.0 全新 ui 版本发布!vue+前后端分离

前言 sensitive-word-admin 最初的定位是让大家知道如何使用 sensitive-word&#xff0c;所以开始想做个简单的例子。 不过秉持着把一个工具做好的原则&#xff0c;也收到很多小伙伴的建议。 v2.0.0 在 ruoyi-vue&#xff08;也非常感谢若依作者多年来的无私奉献&#xff09…...

HTML属性

HTML&#xff08;HyperText Markup Language&#xff09;是网页开发的基石&#xff0c;而属性&#xff08;Attribute&#xff09;则是HTML元素的重要组成部分。它们为标签提供附加信息&#xff0c;控制元素的行为、样式或功能。本文将从基础到进阶&#xff0c;全面解析HTML属性…...

计算机网络 4-1 网络层(网络层的功能)

【考纲内容】 &#xff08;一&#xff09;网络层的功能 异构网络互连&#xff1b;路由与转发&#xff1b;SDN基本概念&#xff1b;拥塞控制 &#xff08;二&#xff09;路由算法 静态路由与动态路由&#xff1b;距离-向量路由算法&#xff1b;链路状态路由算法&#xff1b;层…...

《算法导论(第4版)》阅读笔记:p17-p27

《算法导论(第4版)》学习第 10 天&#xff0c;p17-p27 总结&#xff0c;总计 11 页。 一、技术总结 1. insertion sort (1)keys The numbers to be sorted are also known as the keys(要排序的数称为key)。 第 n 次看插入排序&#xff0c;这次有两个地方感触比较深&#…...