C基础笔记_指针专题
一:C 和 C++ 偏爱使用指针的原因
1. 通过指针可以直接操作内存
C 和 C++ 是系统级编程语言,它们的设计目标之一是允许开发者直接与硬件交互并高效地管理资源。
- 指针的本质:指针本质上是一个存储内存地址的变量,它让程序员可以直接访问和操作内存中的数据。
- 底层控制:通过指针,程序员可以精确地控制内存分配、释放以及数据布局,这对于编写操作系统、驱动程序、嵌入式系统等底层软件至关重要。
int x = 10;
int *p = &x; //指针变量 p 存储了 x 的地址
*p = 20; // 修改原始数据 x 的值为 20
2. 高效性和灵活性
指针提供了极高的效率和灵活性,特别是在性能敏感的应用中。
- 减少复制开销:通过传递指针而不是整个数据结构,可以避免大量数据的复制,从而提高性能。
- 动态内存分配:指针结合
malloc
/free
(C)或new
/delete
(C++)可以动态分配和释放内存,这在需要灵活管理内存时非常有用。
struct Node {int data;struct Node *next;
};struct Node *head = (struct Node *)malloc(sizeof(struct Node));
head->data = 42;
head->next = NULL;
Java 和 Python 中也有类似的功能(如对象引用和垃圾回收),但这些功能是由运行时环境自动管理的,程序员无法直接干预。
3. 支持复杂的数据结构
指针是实现复杂数据结构(如链表、树、图等)的核心工具。
- 在 C/C++ 中,通过指针可以轻松构建动态数据结构。例如,链表节点通常包含一个指向下一个节点的指针。
- 在没有指针的语言中,这些数据结构通常由运行时环境或标准库提供,程序员无法直接控制底层实现。
struct LinkedList {int value;struct LinkedList *next;
};
在 Java 中,类似的结构可以通过对象引用来实现,但底层的内存管理和指针操作是由 JVM 自动完成的。
4. 兼容底层硬件
C 和 C++ 被广泛用于开发操作系统、编译器、嵌入式系统等底层软件,这些场景需要直接操作硬件寄存器和内存。
- 硬件交互:许多硬件设备通过特定的内存地址进行通信。指针使得程序员可以直接读写这些地址,从而与硬件交互。
- 中断处理:在实时系统中,指针常用于快速响应中断信号并访问共享资源。
#define PORT_A (*(volatile unsigned int *)0x1000) // 映射到硬件寄存器
PORT_A = 0xFF; // 写入数据到硬件寄存器
Java 和 Python 这样的高级语言完全屏蔽了这种底层操作。
5. 提供更高的自由度
C 和 C++ 的设计哲学是“信任程序员”,给予程序员极大的自由来决定如何使用资源。
- 手动内存管理:C 和 C++ 允许程序员完全控制内存的分配和释放,这虽然增加了出错的风险,但也提供了更高的性能和灵活性。
- 零成本抽象:C++ 的核心理念之一是“零成本抽象”(zero-cost abstraction),即高级特性(如类和模板)不会引入额外的运行时开销。指针是实现这一理念的重要工具。
6. 指针的危险性
尽管指针非常强大,但它也带来了潜在的危险性,这也是为什么许多现代语言选择隐藏指针的原因。
- 野指针:未初始化或已释放的指针可能导致未定义行为。
- 内存泄漏:忘记释放动态分配的内存会导致内存泄漏。
- 缓冲区溢出:错误的指针操作可能导致数组越界或其他安全问题。
int *p = malloc(sizeof(int)); // 分配内存 字节大小 sizeof(int)=8byte
*p = 42;
free(p);
*p = 10; // 错误:对已释放的内存进行访问
Java 和 Python 通过垃圾回收机制和边界检查避免了这些问题,但这也牺牲了一部分性能和灵活性。
7. 现代语言的选择
现代语言(如 Java、Kotlin 和 Python)选择隐藏指针的原因在于:
- 安全性:通过封装指针操作,减少了程序员犯错的可能性。
- 易用性:隐藏底层细节后,程序员可以专注于业务逻辑,而无需担心内存管理。
- 自动化管理:垃圾回收器自动管理内存,减少了手动管理的复杂性。
int[] arr = new int[10]; // 创建数组
arr[0] = 42; // 直接操作数组元素
在底层,
arr
实际上是一个指向数组首地址的指针,但 Java 隐藏了这些细节,并提供了边界检查以防止越界访问。
二:XX类型的指针
在C语言中,指针是一种非常强大的工具,它可以指向任何类型的数据。除了
int
类型的指针外,还有多种其他类型的指针,包括但不限于基本数据类型、数组、结构体、联合体和函数指针等。
1. 基本数据类型的指针
除 int
外,还可以有指向其他基本数据类型的指针,如 char
, float
, double
等。
char *cp; // 指向 char 类型的指针变量cp
float *fp; // 指向 float 类型的指针变量fp
double *dp; // 指向 double 类型的指针变量dp
2. 数组指针类型
可以声明一个指针来指向数组。需要注意的是,数组名本身就是一个指向数组第一个元素的指针。
int arr[5];
int (*ap)[5] = &arr; // ap 是一个指向包含5个 int 元素的数组的指针
3. 指向指针的指针(多级指针)
你可以有一个指向指针的指针,甚至更多级别。
int x = 10;
int *p = &x; // p 是指向 int 的指针
int **pp = &p; // pp 是指向 int类型指针p 的指针
4. 结构体指针类型
指针也可以用来指向结构体类型的数据。
struct Point {int x, y;
};struct Point pt = {1, 2};
struct Point *ppt = &pt; // ppt 是一个指向 struct Point 的指针//访问结构体成员时,如果使用指针,则需要使用箭头操作符 -> 而不是点操作符 .
printf("x: %d\n", ppt->x); // 使用 -> 访问成员变量
5. 函数指针类型
函数指针是 指向函数的指针 ,允许你将函数作为参数传递给其他函数或从函数返回。
int add(int a, int b) {return a + b;
}int (*fp)(int, int) = add; // fp 是一个指向接受两个 int 参数并返回 int 类型的函数add的指针
int result = fp(5, 3); // 调用通过指针指向的函数
6. Void 指针
void*
是一种特殊类型的指针,它可以指向任意类型的数据,但不能直接解引用,因为编译器不知道它指向的数据类型。
关键字
void
1. 表示“无类型”
void
的字面意思是“空”或“无”,用来表示“没有类型”。它可以用于以下场景:
(1) 函数返回值为 void
当一个函数不需要返回任何值时,可以将其返回类型声明为 void
。
void sayHello() {printf("Hello, World!\n");
}
(2) 函数参数列表为 void
当一个函数不接受任何参数时,可以将其参数列表声明为 void
(虽然现代 C 中通常省略 void
)
这里的
void
表示函数不接受任何参数。在 ANSI C 标准中,
void
参数列表是显式表明函数没有参数的推荐方式。
int getRandomNumber(void) {return 42; // 返回一个随机数
}
2. 指针类型:void*
void*
是一种特殊的指针类型,表示“指向未知类型的指针”。
void*
特点:
void*
可以指向任何数据类型的变量。- 它是一种通用指针类型,常用于需要处理多种数据类型的情况。
- 不能直接解引用
void*
,因为它不知道所指向的数据的具体类型。
#include <stdio.h>//printValue 函数接受一个 void* 类型的指针,并根据类型参数决定如何解引用。
//注意:void* 必须显式转换为目标类型后才能解引用。
void printValue(void *ptr, char type) {if (type == 'i') {printf("%d\n", *(int*)ptr); // 将 void* 转换为 int*} else if (type == 'f') {printf("%f\n", *(float*)ptr); // 将 void* 转换为 float*}
}int main() {int x = 42;float y = 3.14;printValue(&x, 'i'); // 输出整数printValue(&y, 'f'); // 输出浮点数return 0;
}
3. 表示“无操作”
在某些情况下,void
用于表示“无操作”或“忽略结果”。
int main() {printf("This is a test.\n");(void)printf("This result is ignored.\n"); // 明确忽略返回值return 0;
}
(void)
明确表示忽略表达式的返回值。这种写法在某些代码风格中被用来消除编译器警告。
4. 空参数列表
在旧版 C(K&R C)中,函数定义中的空参数列表默认表示“任意数量和类型的参数”。为了明确表示函数不接受任何参数,ANSI C 引入了 void
。
// K&R 风格:表示可以接受任意参数
int func() {return 42;
}// ANSI C 风格:明确表示不接受参数
int func(void) {return 42;
}
现代 C 编程中,建议使用
void
来明确说明函数不接受参数。
5. 结合 typedef
使用
void
也可以与其他关键字结合使用,例如与 typedef
定义通用指针类型。
typedef void (*Callback)(int);void executeCallback(Callback cb, int value) {cb(value);
}void myCallback(int x) {printf("Callback called with %d\n", x);
}int main() {executeCallback(myCallback, 42);return 0;
}
这里,
Callback
是一个函数指针类型,指向一个接受int
参数且返回void
的函数。
void* 的疑惑
1. *
的作用
* 是指针声明符,表示“这是一个指针”。它的作用是修饰变量或类型,表明这个变量是一个指针,而不是普通的数据类型。
相关文章:
C基础笔记_指针专题
一:C 和 C 偏爱使用指针的原因 1. 通过指针可以直接操作内存 C 和 C 是系统级编程语言,它们的设计目标之一是允许开发者直接与硬件交互并高效地管理资源。 指针的本质:指针本质上是一个存储内存地址的变量,它让程序员可以直接访问和操作内…...
GPT-SoVITS Windows 配置与推理笔记(自用)
GPT-SoVITS Windows 配置与推理笔记(自用) 这是给自己留的备份,方便下次查。Windows 端配置和推理为主,代码为核心,直接干货。 环境准备 系统:Windows 10/11Python:3.9(别用别的版…...
【设计模式】面向对象开发学习OOPC
PLOOC-裸机思维 PLOOC OOPC精要——撩开“对象”的神秘面纱 C/C面向对象编程之封装-KK 面向过程,本质是“顺序,循环,分支”面向对象,本质是“继承,封装,多态”参考的书籍:《UMLOOPC嵌入式C语言…...
LVGL开发指南
一、主流ARM开发UI界面库 主流ARM开发UI界面库的详细对比分析,从多个维度评估各库的适用场景: 1. 基础对比表 特性LVGLQt for MCUEmbedded WizardTouchGFXemWin许可证MIT开源商业商业商业(STM32免费)商业RAM最小需求16KB512KB64KB256KB50KBFlash占用64KB+1MB+200KB+500KB+1…...
linux shell looop循环写法
在 Linux Shell 中编写loop循环的常见方法有以下几种,适用于持续执行任务或监控场景: 1. while true 循环(最常用) while true; do# 循环体内的命令echo "Running..."sleep 1 # 避免 CPU 占用过高 done 终止方式&…...
【力扣hot100题】(075)数据流的中位数
一开始只建立了一个优先队列,每次查询中位数时都要遍历一遍于是喜提时间超限,看了答案才恍然大悟原来还有这么聪明的办法。 方法是建立两个优先队列,一个大根堆一个小根堆,大根堆记录较小的数,小根堆记录较大的数。 …...
蓝桥杯刷题总结 + 应赛技巧
当各位小伙伴们看到这篇文章的时候想必蓝桥杯也快开赛了,那么本篇文章博主就来总结一下一些蓝桥杯的应赛技巧,那么依旧先来走个流程 那么接下来我们分成几个板块进行总结 首先是一些基本语法 编程语言的基本语法 首先是数组,在存数据的时候…...
JetBrains Terminal 又发布新架构,Android Studio 将再次迎来新终端
不到一年的时间,JetBrains 又要对 Terminal 「大刀阔斧」,本次发布的新终端是重构后的全新的架构,而上一次终端大调整还是去年 8 月的 v2024.2 版本,并且在「Android Studio Ladybug | 2024.2.1」也被引入。 不知道你们用不用内置…...
怎么构造思维链数据?思维链提示工程的五大原则
我来为您翻译这篇关于思维链提示工程的文章,采用通俗易懂的中文表达: 思维链(CoT)提示工程是生成式AI(GenAI)中一种强大的方法,它能让模型通过逐步推理来解决复杂任务。通过构建引导模型思考过程的提示,思维链能提高输出的准确性…...
mongodb--用户管理
文章目录 MongoDB 用户管理1. 连接到 MongoDB2. 用户创建2.1 创建管理员用户2.2 创建特定数据库用户2.3 常用内置角色 3. 用户管理操作3.1 查看所有用户3.2 查看特定用户信息3.3 更新用户密码3.4 添加用户角色3.5 移除用户角色3.6 删除用户 4. 权限修改4.1 创建自定义角色4.2 将…...
2025年考OCP认证有用吗?
在数字化转型的浪潮中,数据库管理技术成为企业核心竞争力的基石。Oracle作为全球领先的数据库解决方案提供商,其OCP(Oracle Certified Professional)认证不仅是技术能力的权威背书,更是职业发展的强力引擎。以下从多个…...
川翔云电脑:D5 渲染摆脱硬件限制,云端高效创作
在设计领域,D5 渲染器凭借实时光追技术、高效工作流程及优质输出效果,成为设计师的得力工具。然而,其对高端 RTX 显卡的依赖,导致硬件成本高、本地性能受限及办公地点固定等问题,让不少创作者望而却步。 D5 渲染器的优…...
设计模式(23种设计模式简介)
设计模式 简介 设计模式是解决软件设计中常见问题的可重用解决方案模板,通过总结反复验证的代码设计经验,提升代码的可重用性、可维护性和扩展性。其核心是通过标准化的设计思想,让代码更易理解、协作更高效,并在面向对象编程中…...
Python设计模式:工厂模式
1. 什么是工厂模式? 工厂模式是一种创建对象的设计模式,它提供了一种创建对象的接口,但不暴露对象创建的具体逻辑。工厂模式的核心思想是将对象的创建与使用分离,从而提高代码的灵活性和可维护性。 1.1 工厂模式的类型 1.1.1 简…...
UE5 给函数分类
如果函数太多不方便找,我们可以给函数设置一个分组 选中一个函数,修改它的类别 然后在函数列表里可以看到分好的类 其他函数可以直接拖进类别里,不用每个函数都手动设置类别 一次只能拖动一个函数...
5️⃣ Coze+AI应用基础教学(2025年全新版本)
目录 一、了解应用开发 1.1 扣子应用能做什么 1.2 开发流程 1.3 开发环境 二、快速搭建一个AI应用 2.1 AI翻译应用介绍 2.2 设计你的应用功能 2.3 创建 AI 应用项目 2.4 编写业务逻辑(新建工作流) 2.5 搭建用户界面 2.6 效果测试 2.7 发布应…...
高级前端题库
前端题库 JS篇 如何理解作用域和作用域链 作用域 作用域就是变量或函数在其内能够被访问的“可见区域” 全局作用域局部作用域 作用域链 当在某个作用域中尝试访问一个变量时,JS引擎会从当前作用域开始,沿着作用域链向上逐级开始查找,直到…...
博途 TIA Portal之1200做主站与汇川EASY的TCP通讯
前言,虽然已经做了几篇关于TCP通讯的文章,但是不同的PLC之间的配合可能不同,下面将演示这种差异。 关于汇川EASY做从站的配置请参见下方链接文章:汇川EASY系列之以太网通讯(套接字socket做从站)_汇川以太网tcp套接字fb块-CSDN博客 1、硬件准备: 1200PLC,汇川EASY320…...
在conda虚拟环境安装GIT并且克隆github上项目指南(解决443问题)
此次笔记记录自己在conda虚拟环境安装git,同时克隆github项目,并且解决了git的443问题。 如有不妥欢迎各位大佬批评指正。 首先默认你已经安装了anaconda。 代开命令提示行 配置环境 #首先创建虚拟环境 conda create -n git_env python3.8 #激活虚拟环…...
JavaWeb遇到的问题汇总
问题一:(键值对最后一项没有逗号) 在JSON字符串转自定义对象和自定义对象转JSON字符串时: 如图所示:若忘记删除键值对的最后一项没有逗号时,则下一句转换不会生效,应该删除最后一项的逗号。 解…...
Stable Diffusion + Contronet,调参实现LPIPS最优(带生成效果+指标对比)——项目学习记录
目录 前言 一、数据集:图像文本,部分选取于DeepFashion 二、优化一,img2img 三、优化二,微调sd参数 四、优化三,dreamshaper优化 五、优化四,sdv1.5contronet 六、问题探索历程 1. 从 SDXL 到轻量化模…...
【“星睿O6”AI PC开发套件评测】在O6开发板使用gemma-2b测试CPU性能
前提条件: x64 Linux 主机:安装CMake 和 arm-gnu-toolchain-12.2.rel1-x86_64-aarch64-none-linux-gnu radxa O6主机 1.从 Kaggle 获取模型权重和分词器 Gemma 3 2B 模型文件:访问 Kaggle 上的 Gemma 模型页面 https://www.kaggle.com/mode…...
数学知识——矩阵乘法
使用矩阵快速幂优化递推问题 对于一个递推问题,如递推式的每一项系数都为常数,我们可以使用矩阵快速幂来对算法进行优化。 一般形式为: F n F 1 A n − 1 F_nF_1A^{n-1} FnF1An−1 由于递推式的每一项系数都为常数,因此对…...
3DMax中模型解组
1、从网上下载下来的模型是一个整体,需要解开查看每个样式 2、解开组...
链路聚合+vrrp
1.链路聚合 作用注意事项将多个物理接口(线路)逻辑上绑定在一起形成一条逻辑链路,起到叠加带宽的作用1.聚合接口必须转发速率一致。2.聚合设备两端必须一致 配置命令 方法一 [Huawei]interface Eth-Trunk 0----先创建聚合接口,…...
0 std::process::Command 介绍
std::process::Command 是 Rust 标准库中用于创建和配置子进程的主要类型。它允许你启动新的进程、设置其参数和环境变量、重定向输入/输出等。 基本用法 use std::process::Command;let output Command::new("echo").arg("Hello, world!").output().ex…...
Android 中Intent 相关问题
在回答 Intent 问题时,清晰区分其 定义、类型 和 应用场景。以下是的回答策略: 一、Intent 的核心定义 Intent 是 Android 系统中的 消息传递对象,主要用于三大场景: 2. 隐式 Intent(Implicit Intent) 三、…...
【Docker】Docker Desktop镜像存储路径设置方法
在 Docker Desktop 中设置镜像存储路径(即下载的镜像文件存放位置)取决于你的操作系统。以下是不同系统下的设置方法: Windows 系统 完全卸载后重新安装指定路径(Docker Desktop for Windows 默认使用 C:\ProgramData\Docker&…...
Spring Boot 3.x 中 WebClient 全面详解及示例
Spring Boot 3.x 中 WebClient 全面详解及示例 1. WebClient 简介 定义:Spring 5 引入的响应式 HTTP 客户端,用于替代 RestTemplate(已弃用),支持异步非阻塞的 HTTP 请求。核心特性: 支持所有 HTTP 方法&a…...
将图片按照指定大小批量进行裁剪(可设置步长_python)
将图片按照指定大小批量进行裁剪(可设置步长_python) import os from PIL import Image# 设置更高的图像大小限制,禁用解压炸弹检查 Image.MAX_IMAGE_PIXELS None # 禁用解压炸弹检查def crop_image(image_path, block_size(640, 640), step_size(340, 340)):# 打…...
设计模式 --- 原型模式
原型模式是创建型模式的一种,是在一个原型的基础上,建立一致的复制对象的方式。这个原型通常是我们在应用程序生命周期中需要创建多次的一个典型对象。为了避免初始化新对象潜在的性能开销,我们可以使用原型模式来建立一个非常类似于复印机的…...
工作经验记录
坑 部门例会上:跨级暴露问题.部门例会上:说话没有条理,周报写得好,但是表达效果不同.领导直接要求的任务没有当时推进:需考虑GTD清单.不要马后炮领导签字要按顺序 会议上 发言有条理问题不要越级暴露不要强调过程 对同事 对领导 领导同意的文件最好当日通过. 对供应商 不…...
Unity中基于2.5D的碰撞系统
在2.5D游戏中实现精确的碰撞检测是一个关键挑战,因为我们需要在视觉上有深度感的同时保持游戏逻辑的准确性。下面我将详细解析2.5D碰撞系统的实现方法。 1. 2.5D碰撞的核心问题 1.1 Z轴深度与碰撞的关系 视觉表现:物体通过Y轴位置影响Z轴排序ÿ…...
设计模式-命令模式详解
命令模式详解及真实场景解决方案 模式定义 命令模式是一种行为设计模式,将请求封装为独立对象,包含执行操作所需的所有信息。通过这种方式,可以实现请求的参数化、队列管理、撤销/重做等高级功能,同时解耦请求发送者与接收者。 …...
基于Python(Django)+SQLite 实现(Web) 点菜管理系统
点菜管理系统 课程设计任务与要求 1、任务 题目:点菜管理信息系统 问题描述: 随着网络的迅速发展,越来越多的人开始接受甚至时依赖了网络营业的这种交易形式,传统的点菜模式不仅浪费时间,效率低下,而且…...
泰鸿万立上市:加强产品规划和前瞻性研发 打造优质汽车零部件制造商
4月9日,浙江泰鸿万立科技股份有限公司(股票简称“泰鸿万立”,股票代码“603210”)正式登陆上交所主板。 招股书显示,泰鸿万立主营业务为汽车结构件、功能件的研发、生产与销售。经过十余年发展,公司拥有了…...
Charles的安装和使用教程
Charles抓包工具与Sniff Master在Windows上的安装与使用指南 1. Charles抓包工具安装 1.1 下载Charles 进入Charles官网(https://www.charlesproxy.com/download/)下载最新版本的安装包 1.2 安装与激活 正常安装后,打开会提示试用版30天限制进入授权码生成页面…...
论文阅读笔记:Adaptive Multi-Modal Cross-Entropy Loss for Stereo Matching
论文阅读笔记:Adaptive Multi-Modal Cross-Entropy Loss for Stereo Matching 1 背景2 创新点3 方法4 模块4.1 基础和问题描述4.2 自适应多模态概率模型4.3 主模态视差估计器 5 效果6 结论 1 背景 尽管深度学习在立体匹配方面取得了巨大成功,但恢复准确…...
JavaScript学习教程,从入门到精通,JavaScript 运算符及语法知识点详解(8)
JavaScript 运算符及语法知识点详解 一、JavaScript 运算符 1. 算术运算符 用于执行数学运算: 加法- 减法* 乘法/ 除法% 取模(余数) 递增-- 递减** 幂运算(ES6) let a 10, b 3; console.log(a b); // 13 conso…...
聊聊Spring AI的ETL Pipeline
序 本文主要研究一下Spring AI的ETL Pipeline DocumentReader org/springframework/ai/document/DocumentReader.java public interface DocumentReader extends Supplier<List<Document>> {default List<Document> read() {return get();}}有TextReader…...
spark架构和RDD相关概念
运行架构: Spark采用master - slave结构,Driver作为master负责作业任务调度,Executor作为slave负责实际执行任务。 核心组件 Driver:执行Spark任务的main方法,将用户程序转化为作业,在Executor间调度任务&…...
Cloud Kernel SIG 季度动态:发布ANCK 6.6-003版本,支持一测多证
Cloud Kernel SIG(Special Interest Group):支撑龙蜥内核版本的研发、发布和服务,提供生产可用的高性价比内核产品。 01 SIG 整体进展 发布 ANCK 6.6-003 版本。 一测多证流程建立。 OOT 驱动基线更新。 海光平台适配进展更新…...
【11】数据结构之基于线性表的查找算法
目录标题 平均查找长度ASL(Average Search Length)顺序表查找法折半查找法索引顺序查找法 平均查找长度ASL(Average Search Length) 定义:为确定元素在列表中的位置,需要和给定值进行比较的关键字个数的期望值,称之为查找算法成功时的平均查…...
铼赛智能Edge mini斩获2025法国设计大奖 | 重新定义数字化齿科美学
铼赛智能(RAYSHAPE)革命性新品——椅旁3D打印机Edge mini荣获2025年法国设计奖(FRENCH DESIGN AWARDS,简称FDA)产品设计类大奖。作为全球工业设计领域最具影响力的奖项之一,这一殊荣不仅是对产品极简美学的…...
成为一种国家战略范畴的新基建的智慧园区开源了
智慧园区场景视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,从而大大减少企业级应用约95%的开发成本。用户只需在界…...
Codeforces Round 1016 (Div. 3)题解
题目地址 https://codeforces.com/contest/2093 锐评 在所有题意都理解正确的情况下,整体难度不算太难。但是偏偏存在F这么恶心的题意,样例都不带解释一下的,根本看不懂题。D题也恶心,在于递归过程的拆分,需要点数学…...
安全理念和安全产品发展史
从安全理念的发展历史来看,技术与产品的演进始终围绕 “威胁对抗” 与 “业务适配” 两大核心展开。以下从七个关键阶段解析安全技术与产品的发展脉络,并结合最新实践与未来趋势提供深度洞察: 一、密码学奠基阶段(1970s 前) 安全理念:以 “信息保密” 为核心,防御手段…...
【深度学习】Downstream Model:预训练模型的下游应用与微调技术
Downstream Model:预训练模型的下游应用与微调技术 文章目录 Downstream Model:预训练模型的下游应用与微调技术1 什么是Downstream Model(下游模型)2 预训练模型与下游任务的关系3 微调技术与迁移学习微调的必要性高效迁移学习参…...
每日算法-250409
这是我今天的算法学习记录。 2187. 完成旅途的最少时间 题目描述 思路 二分查找 解题过程 为什么可以使用二分查找? 问题的关键在于寻找一个最小的时间 t,使得在时间 t 内所有公交车完成的总旅途次数 sum 大于等于 totalTrips。 我们可以观察到时间的单…...
【CSS 选择器组合规则详解】
基础选择器组合 空格:后代选择器 > 直接子元素选择器 . 类选择器 : 伪类选择器 多类选择器 .class1.class2 :多类组合 .class1 .class2 :类的所有后代 .class1 > .class2 :类的子元素特殊选择器 :nth-child() :nth-of-…...