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

C语言——深入理解指针(一)

C语言——指针(一)

进入指针后,C语言就有了一定的难度,我们需要认真理解

指针(一)

1 .内存和地址

内存:程序运行起来后,要加载到内存中,数据的存储也是在内存中。
我们知道电脑上有CPU,内存(8G,16G,32G),硬盘(500G/1T),外部设备.我们常说的电脑内存几百G其实是不对的,那其实应该是硬盘的大小。

计算机常见的单位:1个比特位可以存储一个2进制的位1或者0
1个字节(Byte)=8个比特位(bit)
1kB=1024(2^10)Byte
1MB=1024kB,1GB=1024MB
1TB=1024GB
1PB=1024YB
1个字节就是1个内存单元,如下图,16进制数字如0xFFFFFFFF就是1个地址

在这里插入图片描述
内存单元的编号=地址=指针
编址:CPU与内存之间有大量数据交互,两者就必须要用各种“线”连接起来。CPU与内存之间的线有地址总线,数据总线,控制总线;我们需要了解其中一组线叫地址总线
CPU访问内存中的某个字节空间必须知道这个字节空间在内存的什么位置,而因为内存中的字节很多,所以需要给内存进行编址

2.指针变量和地址

1.取地址操作符&:变量创建的本质是内存申请自己的空间,用来存储数据。

#int main()
{int a=10;int* p=&a;//编号=地址=指针//p被称为指针变量,理解为:存放指针的变量//指针变量也是变量,是专门存放地址的
}

2.拆解指针类型

int a=10;
int * pa=&a;

这里pa左边是int*,*是在说明pa指向的是整型(int)类型的对象。(间接访问操作符)
我们在拿到地址(指针),就可以通过地址(指针)指向的对象,需用到解引用操作符

3.** 解引用操作符 **

int main()
{int a=100;int* p=&a;//*p的意思就是通过p中存放的地址找到指向的空间*p=0;//这里是用*取出变量a,把a的值改成了0return 0;
}

4.指针变量的大小
x64下地址是64个比特位,指针变量大小是8个字节,与类型无关;32位同理,地址是32个比特位,指针变量大小是4个字节。
以下是在64位下的指针变量大小
在这里插入图片描述
5.指针变量类型的意义
(1)指针的解引用
指针的类型决定了,对指针解引用的时候有多大的权限(一次能操作几个字节)。比如:char的指针解引用就只能访问一个字节,而int的指针的解引用就能够访问四个字节。
(2)指针加减整数
在这里插入图片描述
由上得出,指针的类型决定了向前或向后走一步走多大距离。
(3)void *指针
可理解为无具体类型的指针(或者叫泛型指针),这种类型的指针可以用来接受任意类型地址。但是也有局限性,该类型的指针不能直接进行指针的加减整数和解引用的运算。

3.指针运算

  • 指针+ -整数
int arr[10]={1,2,3,4,5,6,7,8,9,10};
int i=0;
int sz=sizeof(arr)/sizeof(arr[0]);
int* p=&arr[0];//拿到第一个元素的地址
for(i=0;i<sz;i++)
{
printf("%d ",*p);
p++;//p=p+1;
}
//第二种写法:
int arr[10]={1,2,3,4,5,6,7,8,9,10};
int i=0;
int sz=sizeof(arr)/sizeof(arr[0]);
int* p=&arr[0];
for(i=0;i<sz;i++)
{
printf("%d ",*(p+i));
}

在这里插入图片描述

  • 指针-指针(前提是两个指针指向了同一块空间,否则不能相减)
    指针减指针的绝对值是它们之间元素的个数
int arr[10]={0};
printf("%lld\n,&arr[9]-&arr[0]);//-->结果为9
printf("%lld\n,&arr[0]-&arr[9]);//-->结果为-9

在这里插入图片描述

数组名是数组首元素的地址,即

arr==&arr[0]

例:用指针减指针求字符串长度
在这里插入图片描述

  • 指针的关系运算
    在这里插入图片描述

指针(二)

4. const修饰指针

1.const修饰变量:用const修饰变量后,这个变量的值就不能再被更改

const int a=10;//const就是常属性的意思
printf("%d\n",a);//a就叫常变量,虽然a不能被修改了,但a的本质还是变量

2。** const修饰指针变量 **
但是我们可以利用指针进行更改1中变量的值

const int a=10;
int* pa=&a;
*pa-20;
printf("%d\n",a);
//此时a就被更改了,打印的结果就是20

要是不想让其被更改,可以让const修饰指针变量,即

const int a=10;
//这里有两种写法
const int* pa=&a;//const修饰*pa
int* const pa=&a;//const修饰pa
//此时a的值不能被更改
//*pa就是pa指向的对象

当const放在星左边,const限制的是pa指向的对象,也就是 星pa 不能给修改,但是pa不受限制,也就是指针变量可以改变指向
当const放在星的右边,const限制的是pa,也就是pa的指向不能改变了,但是*pa不受限制,也就是说pa指向的内容,是可以通过pa来改变的

举个例子:

1.
int a=10;
int b=100;
const int* p=&a;
*p-=10;//a=0;
p=&b;//ok
2.
int a=10;
int b=100;
int * const p=&a;
*p-=10;//right
p=&b;//error

5.野指针

  • 概念野指针(指针指向的空间,是不属于当前程序的)就是指针指向的位置是不可知的(随机的,不正确的,没有明确限制的)
  • 野指针成因:(列举三个)
    (1)指针未初始化
int main()
{int* p;//p是局部变量,未初始化,它里面就存放了一个随机值*p=20;}

(2)指针越界访问

int main()
{int arr[10]={1,2,3,4,5,6,7,8,9,10};int* p=arr;int sz=sizeof(arr)/sizeof(arr[0]);int i=0;for(i=0;i<=sz;i++){printf("%d ",*p);//循环到第11次的时候,p就是野指针了p++;}return 0;
}

在这里插入图片描述
(3)指针指向的空间释放

int* test()
{int n=100;//n是局部变量,生命周期在出函数就结束了,那这个空间就不再属于n了return &n;
}
int main()
{int* p=test();//p里面是n的地址,但当回去再在这个地址找n时,就不一定能找到n了printf("haha");printf("%d\n",*p);//此时,p就成了野指针了return 0;
  • 如何规避野指针
    (1)指针变量要初始化

1.明确知道,指针变量要初始化为什么值
int a=10;
int* pa=&a;
2.不知道指针变量应该给什么值
int* p=NULL;//空指针

(2)小心指针越界。
(3)指针变量不再使用时,及时置NULL,指针使用之前检查有效性。
(4)避免返回局部变量(栈空间)的地址

下面这种叫返回局部变量是可以的
int* test()
{int n=100;return n;
}
int main()
{int r=test();printf("%d\n",r);return 0;
下面这种才叫返回局部变量的地址是不可以的
int* test()
{int n=100;return &n;
}
int main()
{int* p=test();printf("%d\n",*p);return 0;
}

6.assert断言

assert.h头文件定义了宏assert(),用于在运行时确保程序符合指定条件,如果不符合,就报错终止运行,这个宏常常被称为“断言

assert(p!=NULL);

assert()宏接受一个表达式作为参数,如果该表达式为真,assert()不会产生任何作用,程序继续运行。如果该表达式为假,assert()就会报错,在标准错误流stderr中写入一条错误信息,显示没有通过的表达式,以及包含这个表达式的文件名和行号。

在这里插入图片描述

它有几个好处:它不仅能自动标识文件和出问题的行号,还有一种无需更改代码就能开启或关闭assert()的机制,如果已经确认程序没有问题,不需要再做断言,就在#include<assert.h>语句前面,定义一个宏NDEBUG

#define NDEBUG
#include<assert.h>

然后,重新编译程序,编译器就会禁用文件中所有的assert()语句。如果程序又出现问题,可以移#define NDEBUG 指令(或者把它注释掉),再次编译,这样就重新启用了assert() 语句。
assert()的缺点是,因为引入了额外的检查,增加了程序的运行时间。
一般我们可以在Debug 中使用,在Release 版本中选择禁用assert 就行,在VS这样的集成开发环境中,在Release 版本中,直接就是优化掉了。这样在debug版本写有利于程序员排查问题,在Ralease版本不影响用户使用时程序的效率

指针的使用和传值调用

  • 1.strlen的实现:库函数strlen的功能是求字符串长度,统计的是\0之前的字符的个数,函数原型如下:
size_t strlen(const char * str);

例:

#include<stdio.h>
#include<assert.h>
int my_strlen(const char * str)
{int count=0;assert(str);while(*str){count++;str++;}return count;
}
int main()
{int len=my_strlen("abcdef");printf("%d\n",len);return 0;
}
  • 2.传值调用和传址调用
    那些功能是非指针不可呢?首先我们先来写一下,交换两个整型变量的值
    传值调用:(行不通)
#include<stdio.h> 
void Swap1(int x, int y)
{int z = x;x = y;y = z;
}
int main()
{int a = 10;int b = 20;printf("交换前:a=%d,b=%d\n", a, b);Swap1(a, b);//传值调用//完成不了,因为形参是实参的临时拷贝,改变形参不影响实参printf("交换后:a=%d,b=%d\n", a, b);return 0;
}

所以这里不用指针是完成不了交换的,以下为一种使用指针交换变量的方式
传址调用:

#include<stdio.h>
void Swap2(int* pa,int * pb)
{int z = 0;z = *pa;//z=a*pa = *pb;//a=b*pb = z;
}
int main()
{int a = 10;int b = 20;printf("交换前:a=%d,b=%d\n", a, b);Swap2(&a, &b);//传址调用printf("交换后:a=%d,b=%d\n", a, b);return 0;
}

相关文章:

C语言——深入理解指针(一)

C语言——指针&#xff08;一&#xff09; 进入指针后&#xff0c;C语言就有了一定的难度&#xff0c;我们需要认真理解 指针&#xff08;一&#xff09; 1 .内存和地址 内存&#xff1a;程序运行起来后&#xff0c;要加载到内存中&#xff0c;数据的存储也是在内存中。 我…...

计算机组织原理第一章

1、 2、 3、 4、 5、 从源程序到可执行文件&#xff1a; 6、 7、 8、 8、...

upload-labs通关笔记-第12关 文件上传之白名单GET法

目录 一、白名单过滤 二、%00截断 1、%00截断原理 2、空字符 3、截断条件 &#xff08;1&#xff09;PHP版本 < 5.3.4 &#xff08;2&#xff09;magic_quotes_gpc配置为Off &#xff08;3&#xff09;代码逻辑存在缺陷 三、源码分析 1、代码审计 &#xff08;1&…...

网络学习-epoll(四)

一、为什么使用epoll&#xff1f; 1、poll实质是对select的优化&#xff0c;解决了其参数限制的问题&#xff0c;但是其本质还是一个轮询机制。 2、poll是系统调用&#xff0c;当客户端连接数量较多时&#xff0c;会将大量的pollfd从用户态拷贝到内核态&#xff0c;开销较大。…...

uWSGI、IIS、Tomcat有啥区别?

uWSGI、IIS 和 Tomcat对比 以下是 uWSGI、IIS 和 Tomcat 的对比分析&#xff0c;包括它们的核心特性、适用场景和典型用例&#xff1a; 1. uWSGI 核心特性 • 定位&#xff1a;专为 Python 应用设计的应用服务器&#xff08;支持 WSGI/ASGI 协议&#xff09;。 • 协议支持&a…...

AI本地化服务的战略机遇与发展路径

一、市场机遇&#xff1a;线下商业的AI赋能真空 1. 需求侧痛点明确 实体商家面临线上平台25%-30%的高额抽成挤压利润&#xff0c;传统地推转化率不足5%&#xff0c;而AI驱动的精准营销可将获客成本降低60%以上。区域性服务商凭借对本地消费习惯的深度理解&#xff0c;能构建更精…...

游戏盾的功有哪些?

游戏盾的功能主要包括以下几方面&#xff1a; 一、网络攻击防护 DDoS攻击防护&#xff1a; T级防御能力&#xff1a;游戏盾提供分布式云节点防御集群&#xff0c;可跨地区、跨机房动态扩展防御能力和负载容量&#xff0c;轻松达到T级别防御&#xff0c;有效抵御SYN Flood、UD…...

C++开源库argh使用教程

概述 argh 是一个轻量级的 C 命令行参数解析库&#xff0c;只需要包含一个头文件即可使用。 github页面&#xff1a; https://github.com/adishavit/argh 基本用法 #include "argh.h" 创建argh::parser对象 使用parse方法解析命令行 argh::parser重载了括号运…...

万用表如何区分零线、火线、地线

普通验电笔只能区分火线&#xff0c;零线和地线是区分不出来的&#xff0c;那么&#xff0c;我们就需要使用万用表来进行区分&#xff01;轻松搞定&#xff01; 万用表操作步骤&#xff1a; 1、黑表笔插Com,红表笔接电压和电阻档&#xff0c;万用表打到交流电压750V档。 2、黑表…...

java配置webSocket、前端使用uniapp连接

一、这个管理系统是基于若依框架&#xff0c;配置webSocKet的maven依赖 <!--websocket--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency> 二、配…...

01、java方法

前面与c都很相似&#xff0c;于是我决定从这一章开始复盘java的学习 一、方法 方法的好处主要体现在使用方便&#xff0c;可以在多处调用&#xff0c;不必反复造轮子 1、方法的使用 这就是一个简单的方法创建&#xff1a; public class java0517 {public static int ret(int …...

springboot实现幂等性

一 增加注解 import java.lang.annotation.*;Retention(RetentionPolicy.RUNTIME) Target({ElementType.METHOD}) Documented public interface ApiIdempotent { } 二 aop实现切面 import cn.hutool.extra.spring.SpringUtil; import com.alibaba.fastjson.JSONObject; import…...

Flink 快速入门

本文涉及到大量的底层原理知识&#xff0c;包括运行机制图解都非常详细&#xff0c;还有一些实战案例&#xff0c;所以导致本篇文章会比较长&#xff0c;内容比较多&#xff0c;由于内容太多&#xff0c;很多目录可能展示不出来&#xff0c;需要去细心的查看&#xff0c;非常适…...

MySQL 8.0 OCP 英文题库解析(五)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题31~40 试题31:…...

lovart design 设计类agent的系统提示词解读

文章目录 lovart 设计agent介绍角色定义工作规范工具调用任务复杂度指南任务移交指南其他ref lovart 设计agent介绍 lovart作为设计agent&#xff0c;产品功能包括&#xff1a; 全链路设计能力&#xff1a;可以快速生成完整的品牌视觉方案&#xff0c;包括标志、配色、品牌规范…...

C++11特性

一.C的发展历史 C11是C的第二个主要版本&#xff0c;从C98起的重要更新&#xff0c;引入了大量更改&#xff0c;从C11起C规律的进行每3年更新一次。 二.列表初始化 2.1 C98和C11中的 { } 传统的C98中使用 { } 来进行列表初始化&#xff0c;结构体函数体都使用此类方法&…...

鸿蒙PC操作系统:从Linux到自研微内核的蜕变

鸿蒙PC操作系统是否基于Linux内核,需要结合其技术架构、发展阶段和官方声明综合分析。以下从多个角度展开论述: 一、鸿蒙操作系统的多内核架构设计 多内核混合架构 根据资料,鸿蒙操作系统(HarmonyOS)采用分层多内核架构,内核层包含Linux内核、LiteOS-m内核、LiteOS-a内核…...

用 RefCounted + WeakPtr 构建线程安全的异步模块

在 Chromium 的多线程异步编程中&#xff0c;合理管理对象生命周期非常关键。本文深入介绍 base::RefCountedThreadSafe 和 base::WeakPtr 的组合使用方法&#xff0c;并通过示例分析其使用要点及易踩的坑。 &#x1f331; 基础概念回顾 1. RefCountedThreadSafe<T> 是 …...

ElasticSearch 8.x 快速上手并了解核心概念

目录 核心概念概念总结 常见操作索引的常见操作常见的数据类型指定索引库字段类型mapping查看索引库的字段类型最高频使用的数据类型 核心概念 在新版Elasticsearch中&#xff0c;文档document就是一行记录(json)&#xff0c;而这些记录存在于索引库(index)中, 索引名称必须是…...

2025.5.19总结

工作&#xff1a;今天回归了3个问题单&#xff0c;测需求提交两个问题。然后再工作中慢慢有了自己的一些成就感&#xff0c;觉得工作越来越有干劲&#xff0c;因为感觉自己在工作上能做得越来越好&#xff0c;无论是在沟通方面&#xff0c;还是与同事的关系上&#xff0c;感觉都…...

C++(25): 标准库 <deque>

目录 1、 核心概念 2. 基本语法 3. 特点 4. 特有成员函数 5. 内存与性能 6. 示例代码 7. 成员函数列表 8. 使用场景 9. 注意事项 1、 核心概念 双端队列(Double-Ended Queue,deque) 是一种允许在队列头部和尾部高效插入和删除元素的线性数据结构,同时支持随机访问。…...

[ 计算机网络 ] | 宏观谈谈计算机网络

&#xff08;目录占位&#xff09; 网络间通信&#xff0c;本质是不同的两个用户通信&#xff1b;本质是两个不同主机上的两个进程间通信。 因为物理距离的提升&#xff0c;就衍生出了很多问题。TCP/IP协议栈 / OSI七层模型&#xff0c;将协议分层&#xff0c;每一层都是为了…...

会议动态|第十五届亚太燃烧学术年会精彩探析

ASPACC 2025第十五届亚太燃烧学术年会5月19日在新加坡隆重召开&#xff0c;本届盛会&#xff0c;以“构建零碳和可持续未来”为主题&#xff0c;汇聚了来自亚太的2000余位专家学者进行学术交流。会议聚焦燃烧反应动力学、火焰传播、燃烧效率等方向。 千眼狼在会议上展示了高速摄…...

Dify-3:系统架构

系统架构 概述了 Dify 的系统架构&#xff0c;解释主要组件如何协同工作以提供大语言模型&#xff08;LLM&#xff09;应用开发平台。内容涵盖高层架构、部署选项、核心子系统和外部集成。 1. 整体架构 Dify 采用基于微服务的架构&#xff0c;将前端 Web 应用与后端 API 服务…...

使用 docker-volume-backup 备份 Docker 卷

docker-volume-backup 是一个用于备份 Docker 卷的工具&#xff0c;在 Windows 10 上使用它&#xff0c;你可以按照以下步骤操作&#xff1a; 1. 确保 Docker 环境已安装并正常运行 在 Windows 10 上&#xff0c;你需要安装 Docker Desktop for Windows。可以从 Docker 官方网…...

分布式与集群:概念、区别与协同

分布式与集群:概念、区别与协同 在分布式系统与云计算领域,分布式(Distributed)和集群(Cluster)是两个高频出现的核心概念。它们常被混淆,但本质上属于不同维度的设计思想。本文将从定义、分类、实际应用及协同关系四个层面,结合 Dubbo、Git、Hadoop 等典型案例,系统…...

Matlab简单优化模型应用

一、目的 掌握优化模型的建立方法,能够借助Matlab工具对建立的优化模型进行求解。 二、内容与设计思想 1、分析&#xff1a;某石油设备制造厂每月需要100套压缩机用于维护和运营石油开采设备。这些零件由工厂内部生产&#xff0c;每月生产500套&#xff0c;每批压缩机的生产…...

板凳-------Mysql cookbook学习 (四)

综合对比与选择建议 维度 PHP Java Python Ruby Perl 学习门槛 低&#xff08;适合新手&#xff09; 高&#xff08;语法复杂&#xff09; 低&#xff08;语法简洁&#xff09; 中&#xff08;需理解 Rails 理念&#xff09; 中&#xff08;特殊语法&#xf…...

C语言学习笔记之条件编译

编译器根据条件的真假决定是否编译相关的代码 常见的条件编译有两种方法&#xff1a; 一、根据宏是否定义&#xff0c;其语法如下&#xff1a; #ifdef <macro> …… #else …… #endif例子&#xff1a; #include <stdio.h>//def _DEBUG_ //定义_DEBUG_ int main(…...

网络安全-等级保护(等保) 2-7 GB/T 25058—2019 《信息安全技术 网络安全等级保护实施指南》-2019-08-30发布【现行】

################################################################################ GB/T 22239-2019 《信息安全技术 网络安全等级保护基础要求》包含安全物理环境、安全通信网络、安全区域边界、安全计算环境、安全管理中心、安全管理制度、安全管理机构、安全管理人员、安…...

Android设备 显示充电速度流程

整体逻辑&#xff1a;设备充电速度的判断 系统通过读取充电器的最大电流&#xff08;Current&#xff09;与最大电压&#xff08;Voltage&#xff09;&#xff0c;计算最大充电功率&#xff08;Wattage&#xff09;&#xff0c;以此判断当前是慢充、普通充还是快充&#xff1a…...

megatron——EP并行

1、专家并行&#xff08;Expert Parallelism, EP&#xff09;适用场景 定义&#xff1a; 专家并行是指在混合专家模型&#xff08;Mixture of Experts, MoE&#xff09;中&#xff0c;将不同的专家&#xff08;即子模型&#xff09;分配到不同的设备上&#xff0c;每个设备只负…...

如何轻松删除电脑上的文件(无法恢复文件)

如果您想清理电脑上的存储空间&#xff0c;您可能需要轻松删除电脑上的文件以释放空间。此外&#xff0c;如果您打算出售或捐赠您的旧电脑&#xff0c;永久删除您的文件至关重要&#xff0c;这可以保护您的隐私。无论如何&#xff0c;您需要一种有效且可靠的方法来从计算机中删…...

搭建一个永久免费的博客

搭建永久免费的博客&#xff08;1&#xff09;基本介绍 HugoStackGitHub GitHub GitHub GitHub Build and ship software on a single, collaborative platform GitHub 下载安装git Git - Downloads Edge插件authenticator 2fa client Settings->Password and auth…...

计算机底层的多级缓存以及缓存带来的数据覆盖问题

没有多级缓存的情况 有多级缓存的情况 缓存带来的操作覆盖问题 锁总线带来的消耗太大了。...

ICRA 2024 PROGrasp——实用的人机交互物体抓取系统

在机器人抓取任务中&#xff0c;自然语言理解能够显著改善人机交互体验&#xff0c;尤其是在需要机器人根据人类指令进行环境交互的场景中。然而&#xff0c;现有的抓取系统往往要求用户明确指定目标对象的类别&#xff0c;限制了交互的自然性和灵活性。为了解决这一问题&#…...

【Vue篇】潮汐中的生命周期观测站​

目录 引言 一、Vue生命周期 二、Vue生命周期钩子 三、、生命周期钩子实战 1.在created中发送数据 2.在mounted中获取焦点 四、综合案例-小黑记账清单 1.需求图示&#xff1a; 2.需求分析 3.思路分析 4.代码 5. 总结 引言 &#x1f4ac; 欢迎讨论&#xff1a;如果…...

【OpenCV基础2】图像运算、水印、加密、摄像头

目录 一、图像运算 1、利用“” 2、cv2.add() 3、掩膜异或 二、摄像头 1、读取、视频流保存 2、人脸识别 三、数字水印 1、水印嵌入 ​2、水印提取 四、图像加密 一、图像运算 1、利用“” import cv2 利用""方法将两幅图像相加img1 cv2.imread(project…...

第 25 届中国全电展即将启幕,构建闭环能源生态系统推动全球能源转型

由 AI 算力爆发引发的能源消耗剧增&#xff0c;与碳中和目标、能源安全需求及电网转型压力形成叠加效应&#xff0c;使全球能源体系面临前所未有的挑战。在此背景下&#xff0c;第 25 届中国全电展&#xff08;EPOWER EXPO&#xff09;将于 2025 年 6 月 11 日至 13 日在上海新…...

vue3:十三、分类管理-表格--编辑、新增、详情、刷新

一、效果 实现封装表格的新增、编辑、详情查看,表格刷新功能 实现表格组件中表单的封装 1、新增 如下图,新增页面显示空白的下拉,文本框,文本域,并实现提交功能 2、编辑 如下图,点击行数据,可将行数据展示到编辑弹窗,并实现提交功能 3、详情 如下图,点击行数据,…...

一周快讯 | 银发文娱旅游一周新鲜事

​ 银发文娱旅游一周新鲜事 一周银发文娱旅游产业资讯速览 星期一 5月19日 1 企业动态 同方全球人寿等共建一站式康养服务生态 东秀星健康养老产业等合作赋能康养产业&#xff0c;开发“旅居养老”项目 欧莱雅等合作将推出银发族形象管理课程 2 行业风向 总投资10亿&a…...

C++寻位映射的奇幻密码:哈希

文章目录 1.什么是哈希&#xff1f;2.哈希的常见实现方法2.1 直接定址法2.2 除留余数法 3.哈希冲突4.哈希冲突的解决4.1 闭散列4.1.1 线性探测4.1.1.1 哈希表的基本数据结构4.1.1.2 哈希表的key转换4.1.1.3 哈希表的插入4.1.1.4 哈希表的查找4.1.1.5 哈希表的删除 4.1.2 二次探…...

Spring Boot 集成 druid,实现 SQL 监控

文章目录 背景Druid 简介监控统计 StateFilter其它 Filter详细步骤第 1 步:添加依赖第 2 步:添加数据源配置【通用部分】第 3 步:添加监控配置【关键部分】第 3 步:访问 druid 页面参考背景 😂 在 Code Review 过程中发现,经常有开发会忘记给表加索引。这就导致,生产运…...

从零开始学习three.js(21):一文详解three.js中的矩阵Matrix和向量Vector

一、三维世界的数学基石 在Three.js的三维世界里&#xff0c;所有视觉效果的实现都建立在严密的数学基础之上。其中向量&#xff08;Vector&#xff09; 和矩阵&#xff08;Matrix&#xff09; 是最核心的数学工具&#xff0c;它们就像构建数字宇宙的原子与分子&#xff0c;支…...

无需笔墨之功,锦绣SQL自成桥——QuickAPI古法炼数据秘术

楔子&#xff1a;锦绣SQL&#xff0c;化身为桥 昔有匠人苦修代码之术&#xff0c;欲通数据库与前朝之界&#xff0c;然笔耕不辍&#xff0c;耗时弥久。今有秘器名曰QuickAPI&#xff0c;但凭三寸SQL文&#xff0c;顷刻间筑起数据虹桥。纵使不谙代码之道者&#xff0c;亦可挥毫…...

模块与包的导入

一、导入官方库 我们复盘下学习python的逻辑&#xff0c;所谓学习python就是学习python常见的基础语法学习你所处理任务需要用到的第三方库 类别典型库解决的问题学习门槛基础工具os、sys、json操作系统交互、序列化数据&#xff08;如读写 JSON 文件&#xff09;低科学计算n…...

智能文档抽取技术可以应用于哪些场景?

近日&#xff0c;合合信息编撰并发布了《2025智能文档技术与应用白皮书》。该书中不仅深度解析技术原理与创新突破&#xff0c;更聚焦金融、法律、制造等行业的典型场景&#xff0c;结合典型案例揭示技术如何赋能合同智能审查、票据自动化处理、知识库构建等业务场景&#xff0…...

实践促成长:成都理工大学华清远见成都中心实训

2025年5月, 华清远见成都中心迎来了成都理工大学大数据管理与应用专业23级以及电子商务22级的同学们&#xff0c;以实践为导向、以提升能力为目标的校企合作实训活动在此展开&#xff0c;为同学们开启了一段充满挑战与收获的学习之旅。 华清远见成都中心为两个专业的同学们量身…...

北京本地 SEO 推广:从技术成本到效果转化的深度拆解

在数字化营销的浪潮中&#xff0c;北京本地企业对 SEO 推广的需求日益增长。然而&#xff0c;SEO 推广服务的价格参差不齐&#xff0c;效果也难以预估。本文将从技术实现、成本构成等角度&#xff0c;深入剖析北京本地 SEO 推广服务的价格与效果&#xff0c;baidu0048为企业选择…...

JavaScript 中的五种继承方式进行深入对比

文章目录 前言JavaScript 五种继承方式对比原型链继承构造函数继承组合继承寄生组合继承ES6 class extends 继承五种继承方式对比表前言 对 JavaScript 中的五种继承方式进行深入对比:原型链继承、构造函数继承、组合继承、寄生组合继承、以及 ES6 的 class extends。 内容将…...