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

【C语言】--指针超详解(二)

目录

一.const修饰指针

1.1--const修饰变量

1.2--const修饰指针变量 

二.野指针

2.1--野指针成因

2.1.1--指针未初始化

2.1.2--指针越界访问

2.1.3-- 指针指向的空间释放

2.2--如何规避野指针

2.2.1--指针初始化

2.2.2--小心指针越界

2.2.3--指针变量不再使用时,及时置NULL,指针使用之前检查有效性

2.2.4--避免返回局部变量的地址

三.assert断言       

四.指针的使用和传址调用

 4.1--strlen的模拟实现优化

4.2--传值调用和传址调用 


 

前言:继上篇文章后这篇文章将继续为大家分享指针的相关知识,本篇主要是const修饰指针,野指针,assert断言,指针的使用和传址调用等知识点。

往期回顾: 

【C语言】--指针超详解(一)


一.const修饰指针

1.1--const修饰变量

--变量是可以修改的,如果把变量的地址交给一个指针变量,通过指针变量可以修改这个变量。但是我们如果想要给一个变量加上一些限制,那就用const修饰,这样就不能修改了。

#include<stdio.h>int main()
{const int n = 0;n = 20;//err,n被const修饰后不能被修改return 0;
}

在C语言中这里的n本质上还是变量,只是在语法层面上限制了n的修改,n是常变量

但是我们如果绕过n,使用n的地址,虽然打破了语法规则,不过就可以修改n了 ,如下:

#include<stdio.h>int main()
{const int n = 0;int* p = &n;*p = 20;return 0;
}

这样是不合理的,那该如何限制这种方法呢,我们可以使用const来修饰指针变量做到这一点。

1.2--const修饰指针变量 

 --const修饰指针变量,可以放在*的右边和左边,意义不同。

  1. int * p;//没有const修饰?
  2. int const * p;//const 放在*的左边做修饰
  3. int * const p;//const 放在*的右边做修饰

我们直接通过代码来具体分析一下

#include <stdio.h>//代码1 - 测试⽆const修饰的情况
void test1()
{int n = 10;int m = 20;int* p = &n;*p = 20;//ok?-okp = &m; //ok?-ok
}//代码2 - 测试const放在*的左边情况
void test2()
{
int n = 10;
int m = 20;
const int* p = &n;
*p = 20;//ok?-no
p = &m; //ok?-ok
}//代码3 - 测试const放在*的右边情况
void test3()
{int n = 10;int m = 20;int* const p = &n;*p = 20; //ok?-okp = &m; //ok?-no
}//代码4 - 测试*的左右两边都有const
void test4()
{int n = 10;int m = 20;int const* const p = &n;*p = 20; //ok?-nop = &m; //ok?-no
}int main()
{//测试⽆const修饰的情况test1();//测试const放在*的左边情况test2();//测试const放在*的右边情况test3();//测试*的左右两边都有consttest4();return 0;
}

结论:const修饰指针变量时 

  • const如果放在*的左边,修饰的是指针指向的内容,保证指针指向的内容不能通过指针来改变, 但是指针变量本⾝的内容可变。
  • const如果放在*的右边,修饰的是指针变量本⾝,保证了指针变量的内容不能修改,但是指针指向的内容,可以通过指针改变。

二.野指针

--野指针就是指针指向的位置是不可知的(随机的,不正确的,没有明确限制的),直白的来说就是指针指向的空间是不属于当前程序的。

2.1--野指针成因

--这里将为大家介绍几个常见的野指针形成的原因

2.1.1--指针未初始化

#include <stdio.h>
int main()
{int* p;//局部变量指针未初始化,默认为随机值*p = 20;return 0;
}

2.1.2--指针越界访问

#include <stdio.h>
int main()
{int arr[10] = { 0 };int* p = &arr[0];int i = 0;for (i = 0; i <= 11; i++){//当指针指向的范围超出数组arr的范围时,p就是野指针*(p++) = i;}return 0;
}

2.1.3-- 指针指向的空间释放

#include <stdio.h>
int* test()
{int n = 100;return &n;
}
int main()
{int* p = test();printf("%d\n", *p);return 0;
}
返回n的地址,在函数调用结束后,函数栈帧销毁,再回到这个地址的话里面可能是n,也可能是别的,比如我又多加了个函数,那么在调用它的时候,可能会把原来n的地址给覆盖掉,那打印出来就不会是n的值了。

2.2--如何规避野指针

2.2.1--指针初始化

        如果明确知道指针指向哪⾥就直接赋值地址,如果不知道指针应该指向哪⾥,可以给指针赋NULL. NULL 是C语言中定义的⼀个标识符常量,值是0,0也是地址,这个地址是无法使用的,读写该地址会报错。
如下:

#include <stdio.h>
int main()
{int num = 10;int* p1 = &num;int* p2 = NULL;return 0;
}

2.2.2--小心指针越界

        ⼀个程序向内存申请了哪些空间,通过指针也就只能访问哪些空间,不能超出范围访问,超出了就是越界访问。

2.2.3--指针变量不再使用时,及时置NULL,指针使用之前检查有效性

        当指针变量指向⼀块区域的时候,我们可以通过指针访问该区域,后期不再使⽤这个指针访问空间的 时候,我们可以把该指针置为NULL。因为约定俗成的⼀个规则就是:只要是NULL指针就不去访问,同时使⽤指针之前可以判断指针是否为NULL。
理解方法:我们可以把野指针想象成野狗,野狗放任不管是⾮常危险的,所以我们可以找⼀棵树把野狗拴起来, 就相对安全了,给指针变量及时赋值为NULL,其实就类似把野狗栓起来,就是把野指针暂时管理起来。
不过野狗即使拴起来我们也要绕着⾛,不能去挑逗野狗,有点危险;对于指针也是,在使⽤之前,我们也要判断是否为NULL,看看是不是被拴起来起来的野狗,如果是不能直接使⽤,如果不是我们再去使⽤。
int main()
{int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };int* p = &arr[0];int i = 0;for (i = 0; i < 5; i++){*p = 5;p++;}p = NULL;//下次使⽤的时候,判断p不为NULL的时候再使⽤//...p = &arr[0];//重新让p获得地址if (p == NULL) //判断{printf("p是空指针\n");}else{//……}return 0;
}

  2.2.4--避免返回局部变量的地址

        如造成野指针的第3个例子,不要返回局部变量的地址。


三.assert断言       

assert.h 头⽂件定义了宏 assert() ,⽤于在运⾏时确保程序符合指定条件,如果不符合,就报
错终⽌运⾏。这个宏常常被称为“断⾔”。
#include<assert.h>
assert(p != NULL);
上⾯代码在程序运⾏到这⼀⾏语句时,验证变量 p 是否等于 NULL 。如果确实不等于 NULL ,程序继续运⾏,否则就会终⽌运⾏,并且给出报错信息提示。
assert ()的优点:
  • 能⾃动标识⽂件和出问题的行号
  • ⽆需更改代码就能开启或关闭 assert() 的机制--如果已经确认程序没有问题,不需要再做断⾔,就在 #include <assert.h> 语句的前⾯,定义⼀个宏 NDEBUG

assert ()的缺点:

  • 因为引入了额外检查,增加了程序的运行时间
#define NDEBUG
#include <assert.h>

有了#define NDEBUG这个声明后就会禁用掉程序中所有的assert断言了,如果后续又需要使用的话,直接把这条语句注释了就可以了。 

 一般我们都会在debug版本中使用,在release版本中会直接优化掉的,assert不会影响用户使用程序的效率


四.指针的使用和传址调用

 4.1--strlen的模拟实现优化

--之间我们就用指针实现了strlen函数的作用,经过本章学习后,我们对此进行一个优化

int my_strlen(const char* str)//优化点1
{int count = 0;assert(str!=NULL);//优化点2while (*str){count++;str++;}return count;
}
int main()
{int len = my_strlen("abcdef");printf("%d\n", len);return 0;
}

4.2--传值调用和传址调用 

--那么使用指针可以解决那些问题呢?

我们来看看一个例题--写一个函数,交换两个整型变量的值:

先来看看不用指针写出来的对不对吧~

#include <stdio.h>
void Swap1(int x, int y)
{int tmp = x;x = y;y = tmp;
}
int main()
{int a = 0;int b = 0;scanf("%d %d", &a, &b);printf("交换前:a=%d b=%d\n", a, b);Swap1(a, b);printf("交换后:a=%d b=%d\n", a, b);return 0;
}

当我们运行上述代码后会发现并没有产生交换效果,这是为什么呢?大家可以先自己调试找找问题

--因为形参x和y与实参a和b的地址不一样,所以操作x和y不会影响a和b,故swap1函数内就算交换了,回到main函数后也不会对a和b产生影响。swap1在调用的时候,是把变量本身直接传递给了函数,这种调用函数的方法我们在之前就知道了,这种叫传值调用。

结论:实参传递给形参的时候,形参会单独创建⼀份临时空间来接收实参,对形参的修改不影响实 参。

所以Swap1是失败的。

那我们该咋办呢?--我们可以使用传址调用(调用函数时,将变量的地址传递给函数),在main函数中直接将a和b的地址传递给swap函数,swap里面就可以直接通过地址操作main函数中的a和b,达到交换效果。

#include <stdio.h>
void Swap2(int* px, int* py)
{int tmp = 0;tmp = *px;*px = *py;*py = tmp;
}
int main()
{int a = 0;int b = 0;scanf("%d %d", &a, &b);printf("交换前:a=%d b=%d\n", a, b);Swap2(&a, &b);printf("交换后:a=%d b=%d\n", a, b);return 0;
}
传址调用,可以让函数和主调函数之间建⽴真正的联系,在函数内部可以修改主调函数中的变量; 所以未来函数中只是需要主调函数中的变量值来实现计算,就可以采⽤传值调⽤。如果函数内部要修改主调函数中的变量的值,就需要传址调用。

结语:本篇文章就到此结束了,指针的学习内容还有很多,会在后续的篇章中继续给大家分享,感谢大家的关注和支持。

相关文章:

【C语言】--指针超详解(二)

目录 一.const修饰指针 1.1--const修饰变量 1.2--const修饰指针变量 二.野指针 2.1--野指针成因 2.1.1--指针未初始化 2.1.2--指针越界访问 2.1.3-- 指针指向的空间释放 2.2--如何规避野指针 2.2.1--指针初始化 2.2.2--小心指针越界 2.2.3--指针变量不再使用时&am…...

git 多个提交记录合并为一个

1.场景 有时候用devops等平台测试问题&#xff0c;需要多次修改小的记录提交&#xff0c;但是最终我们在合并主干的时候不想留那么多乱七八糟的记录&#xff0c;就需要在此分支合并这些提交记录&#xff0c;再合并到主干。 2.交互式变基 2.1 确定要合并的提交范围 # 查看最近…...

AI视频生成的艺术:镜头语言

前言 AI视频生成技术正逐渐改变我们创作和消费视频内容的方式,各式各样的AI视频制作软件正在不断的涌现,比如可灵、即梦、runway等。虽然AI视频生成的交互方式(自然语言)极大的减少了我们创作视频的门槛,但要让AI正确理解并创造出符合我们期望的视频,我们可能还是需要了解…...

机器学习与深度学习

目录 一、机器学习 &#xff08;一&#xff09;机器学习的分类 1. 监督学习 2. 无监督学习 3. 强化学习 &#xff08;二&#xff09;机器学习的应用场景 二、深度学习 &#xff08;一&#xff09;深度学习的核心原理 &#xff08;二&#xff09;常见的深度学习模型 …...

数字孪生市场格局生变:中国2025年规模214亿,工业制造领域占比超40%

一、技术深度解析&#xff1a;数字孪生的核心技术栈与演进 1. 从镜像到自治&#xff1a;数字孪生技术架构跃迁 三维重建突破&#xff1a;LiDAR点云精度达2cm&#xff0c;无人机测深刷新频率5Hz&#xff0c;支撑杭州城市大脑内涝预警模型提前6小时预测。AI算法融合&#xff1a…...

数字孪生[IOC]常用10个技术栈(总括)

1. 什么是数字孪生&#xff1f; 数字孪生&#xff08;Digital Twin&#xff09; 是通过数字化技术对物理实体&#xff08;如设备、系统或环境&#xff09;进行高精度建模和实时映射的虚拟副本。其核心是通过 数据驱动 实现物理世界与虚拟世界的双向交互&#xff0c;支持实时监控…...

WPF主窗体子窗体关联方法

步骤&#xff1a; 1、创建WPF项目 2、设计主窗体&#xff0c;选定显示子窗体的区域&#xff08;MainWindow.xaml) 3、在想要显示子窗体的区域填写如下代码&#xff08;MainWindow.xaml) 4、创建子窗体 5、建立调用子窗体事件&#xff0c;下图一是load事件&#xff0c;也可以是…...

笔记本电脑实现网线内网 + Wi-Fi外网同时使用的配置方案

1、同时连接两个网络‌ 插入网线连接内网&#xff0c;确保内网IP地址正常获取&#xff08;如10.143.88.x&#xff09;&#xff1b;连接Wi-Fi接入外网&#xff0c;确认可正常访问互联网&#xff08;如网关为192.168.8.1&#xff09;。 2、 记录关键网络参数‌ 内网网关&#…...

探讨关于智能体(Agent)结合 Dify、大语言模型(LLM)以及 Qwen-3 模型的项目或概念

1. Dify 的作用 Dify 是一个开源的 AI 框架&#xff0c;它可以帮助开发者快速搭建和部署 AI 应用。它可以作为一个基础架构&#xff0c;为智能体提供以下支持&#xff1a; 应用开发与部署&#xff1a;Dify 可以帮助开发者快速搭建智能体的前端和后端架构&#xff0c;包括用户界…...

2025 后端自学UNIAPP【项目实战:旅游项目】3、API接口请求封装,封装后的简单测试以及实际使用

一、创建请求封装目录 选中自己的项目&#xff0c;右键鼠标---->新建---->目录---->名字自定义【我的是api】 二、创建两个js封装文件 选中封装的目录&#xff0c;右键鼠标---->新建---->js文件---->名字自定义【我的两个js文件分别是my_http和my_api】 三…...

【electron+vue】常见功能之——调用打开/关闭系统软键盘,解决打包后键盘无法关闭问题

效果图展示 实现思路&#xff1a;通过input标签聚焦失焦的方式&#xff0c;实现系统软键盘的显示隐藏。 使用场景&#xff1a;一体机电脑&#xff0c;无外接键盘。 html <el-input v-model"idNumber" placeholder"请输入" focus"showKeyboard&qu…...

告别手动输入密码:基于SSHPass的自动化文件传输实践告别手动输入密码:基于SSHPass的自动化文件传输实践

一、运维人员的共同痛点 在日常运维工作中&#xff0c;我们经常需要在多台服务器之间传输文件。传统的手动操作方式需要反复执行以下步骤&#xff1a; 输入scp命令等待密码提示输入复杂密码确认传输结果手动修改文件权限 这种重复劳动不仅效率低下&#xff0c;在批量操作时更…...

Python序列Day3

序列 序列是一种数据存储方式&#xff0c;用方括号标注&#xff0c;逗号分隔的一组值。在内存中&#xff0c;序列就是一块用来存放多个值的连续的内存空间。 常见序列结构有&#xff1a;字符串、列表、元组、字典、集合 列表 用于存储任意数目&#xff0c;任意类型的数据集…...

22、近端策略优化算法(PPO)论文笔记

近端策略优化算法&#xff08;PPO&#xff09;论文笔记 一、研究背景与目标二、**方法****3.1 策略梯度基础****3.2 信任区域方法&#xff08;TRPO&#xff09;****3.3 剪切代理目标函数&#xff08;LCLIP&#xff09;****3.4 自适应KL惩罚系数****3.5 算法实现** 三、 L CLIP…...

web 自动化之 selenium+webdriver 环境搭建及原理讲解

文章目录 一、web 自动化测试学习说明二、什么 web 自动化测试三、selenium 简介四、web自动化测试环境搭建五、web 自动化测试第一个脚本六、selenium 原理及源码讲解 一、web 自动化测试学习说明 进阶 web 自动化测试学习&#xff1a;掌握 python 编程基础 二、什么 web 自…...

Vue3快速入门/Vue3基础速通

Vue3 渐进式的javascript框架&#xff0c;我们可以逐步引入vue的功能 官方文档 Vue.js中文手册 你可以借助 script 标签直接通过 CDN 来使用 Vue&#xff1a; <script src"https://unpkg.com/vue3/dist/vue.global.js"></script>通过 CDN 使用 Vue 时…...

Babylon.js学习之路《一、初识 Babylon.js:什么是 3D 开发与 WebGL 的完美结合?》

文章目录 1. 引言&#xff1a;3D 开发在 Web 中的崛起1.1 为什么需要 Web 3D 开发&#xff1f;1.1 WebGL 的定位与挑战 2. Babylon.js 的核心定位2.1 什么是 Babylon.js&#xff1f;2.2 Babylon.js 的独特优势2.3 对比其他 Web 3D 框架&#xff08;Three.js、PlayCanvas&#x…...

v-model原理详解

一 :value"msg 在 Vue.js 中&#xff0c;v-bind 指令&#xff08;简写为 :&#xff09;用于将数据属性绑定到 HTML 元素的属性上。当你使用 :value"msg" 时&#xff0c;它的作用是将 Vue 实例中的 msg 数据属性绑定到目标元素的 value 属性上。 1.value 属性…...

并发与并行的关系

并发&#xff08;Concurrency&#xff09;与并行&#xff08;Parallelism&#xff09;的本质区别 1. 核心定义 并发&#xff1a;多个任务在重叠的时间段内交替执行&#xff0c;但不一定是同时的。 关注的是任务的组织方式&#xff08;如多任务调度、逻辑上的同时性&#xff09…...

uniapp 微信小程序使用图表

使用的是秋云 ucharts 直接在hbuilder插件市场进行下载导入项目中&#xff0c;多端支持 下载地址秋云 ucharts echarts 高性能跨全端图表组件 - DCloud 插件市场 导入成功后这里就能看到导入的插件啦 导入项目后就可以直接在页面中通过组件使用了 不需要其余配置 使用简单 参…...

基于vm加密的php逆向分析

前言 对于 php 主流的加密方式有两种&#xff1a; 1、基于扩展的 2、本地加密&#xff0c;不涉及扩展 一些在 php 端通过 zend_compile_file 等函数就可以直接 dump 出原代码的&#xff0c;称之为加密实在是抬举了 之前有写过一篇直接 dump 出源码的分析 https://blog.qc7…...

FPGA----基于ALINX提供的debian实现TCF

引言&#xff1a;接上问&#xff0c;我们使用自制的image.ub和boot.bin以及ALINX提供的debian8根文件系统&#xff0c;构建了petalinux&#xff0c;但是经测试&#xff0c;该文件系统无法启用TCF服务&#xff0c;即无法与Xilinx SDK建立连接&#xff0c;那么我们应该如何解决&a…...

基于Transformer的多资产收益预测模型实战(附PyTorch实现与避坑指南)

基于Transformer的多资产收益预测模型实战&#xff08;附PyTorch模型训练及可视化完整代码&#xff09; 一、项目背景与目标 在量化投资领域&#xff0c;利用时间序列数据预测资产收益是核心任务之一。传统方法如LSTM难以捕捉资产间的复杂依赖关系&#xff0c;而Transformer架…...

SQL:MySQL函数:字符串函数

目录 为什么需要字符串函数&#xff1f; 1️⃣ LENGTH(str) — 这个字符串有几个“字节”&#xff1f; 2️⃣ CHAR_LENGTH(str) — 这个字符串有几个“字符”&#xff1f; 3️⃣ TRIM(str) — 把两边的空格剪掉 4️⃣ REPLACE(str, a, b) — 把 a 替换成 b 使用这些函数时…...

C++-缺省参数

缺省参数 缺省参数也叫默认参数 指的是在函数参数的位置&#xff0c;提前定义一个缺省值&#xff08;即提前定义一个值&#xff09;&#xff0c;当函数接收到参数时&#xff0c;如果定义缺省值的位置未接收到参数&#xff0c;那么这个位置会自动使用缺省值 通过定义缺省参数…...

MySQL 数据库

目录 1. 数据库简介 1.1 使用数据库的必要性 1.2 数据库的基本概念 1.3 经典数据模型 2. MySQL 服务基础 2.1 MySQL 的二进制安装 2.1.1 基础环境准备 2.1.2 二进制安装 2.1.3 设定配置文件 1. 数据库简介 1.1 使用数据库的必要性 使用数据库可以高效且条理分明地存…...

探寻养生新路径,守护健康生活

在忙碌的现代生活中&#xff0c;人们对健康养生的需求愈发迫切。养生不一定要遵循复杂的规则&#xff0c;从一些新颖且实用的方面入手&#xff0c;同样能收获健康的馈赠。​ 关注肠道菌群的平衡是养生的关键。肠道内居住着数以万亿计的微生物&#xff0c;它们与人体健康息息相…...

平板收银系统、国产系统,鸿蒙系统,小键盘的封装与应用—仙盟创梦IDE

数字小键盘封装 数组小键盘封装是指将与数组小键盘相关的功能、操作、数据等进行整合&#xff0c;形成一个独立的、可复用的模块。封装数组小键盘具有以下几方面重要意义&#xff1a; 提高代码可维护性 降低复杂度&#xff1a;数组小键盘在实际应用中&#xff0c;可能涉及到…...

微软推动智能体协同运作:支持 A2A、MCP 协议

今日凌晨&#xff0c;微软宣布 Azure AI Foundry 和 Microsoft Copilot Studio 两大开发平台支持最新 Agent 开发协议 A2A&#xff0c;并与谷歌合作开发扩大该协议&#xff0c;这一举措对智能体赛道意义重大。 现状与变革意义 当前智能体领域类似战国时代&#xff0c;各家技术…...

《企业级前端部署方案:Jenkins+MinIO+SSH+Gitee+Jenkinsfile自动化实践》

文章目录 前言前端项目CICD时序图一、环境准备1、服务器相关2、Jenkins凭据3、注意事项 二、设计思想1. 模块化设计2.多环境支持3. 制品管理4. 安全部署机制5. 回滚机制 三、CI阶段1、构建节点选择2、代码拉取3、代码编译4、打包并上传至minio 四、CD阶段五、回滚阶段六、构建通…...

数据库的进阶操作

目录 1、数据库的约束 2、查询操作的进阶 2.1 查询插入 2.2 聚合查询 2.3 运算查询 2.3 分组查询 2.4 联合查询 2.5 内外连接 2.6 子查询 2.7 合并查询 1、数据库的约束 数据库的约束是指&#xff1a;数据库会自动的对数据的合法性进行校验和检查的一系列操作的机制&a…...

小刚说C语言刷题—1341银行存款问题

1.题目描述 亮亮把 n 元按照 m 年期整存存入银行&#xff0c;按照目前银行的年利率&#xff0c;请问到期后亮亮可以连本带息总共拿到多少钱&#xff1f; 存期&#xff08;整存整取&#xff09; 年利率 1年 3.25% 2年 3.75% 3年∼4 年 4.25% 5年及 5年以上 4.75% 输入…...

15 个 Azure DevOps 场景化面试问题及解答

问题 1. 解释 Azure DevOps YAML 管道的典型结构。 您可以从管道的整体结构开始&#xff0c;从触发器开始。您也可以选择解释它可能包含的不同类型的阶段&#xff1a;构建、测试、扫描、部署等。 Azure DevOps YAML 管道结构示例 触发器指示管道运行。它可以是持续集成 (CI) 或…...

spring cloud 跨服务调用

微服务将不同功能模块拆分成多个不同的服务&#xff0c;在业务逻辑集成时候&#xff0c;难免会有一个服务需要依赖调用另一个服务的情况。如订单服务需要通过用户服务查询用户相关信息&#xff0c;这时候微服务之间就需要进行跨服务调用。 要想进行跨服务调用&#xff0c;服务…...

手机隐私数据彻底删除工具:回收或弃用手机前防数据恢复

软件介绍 有这样一款由吾爱网友chenwangjun 原创开发的数据处理软件&#xff0c;名为 AndroidDiskClear。它的核心功能十分强大&#xff0c;能够将你手机里已经删除的各类文件&#xff0c;像图片、普通文件、文字信息等彻底清除干净&#xff0c;有效杜绝数据恢复类软件的二次恢…...

【Electron】electron-vue 借助 element-ui UI 库助力桌面应用开发

前面文章我们讲过 electron 让可以用 HTML、JS、CSS 开发桌面应用程序。而 electron-vue 是一个结合了 electron 与 vue 的套件。这样我们就能方便地使用 vue 快速开发桌面应用。但是&#xff0c;vue 只是在 js 这层面做了大量的便捷的操作。对 UI 并未过多涉及。此时如果您在开…...

《信息论与编码课程笔记》——信源编码(1)

目录 一、信源编码基本概念 1. 定义与目的 2. 编码示例 3. 编码分类 4. 唯一可译码的判断标准 5. 编码评价指标 二、香农第一定理&#xff08;无失真可变长信源编码定理&#xff09; 1. 核心内容 2. 关键概念与指标 3. 数据压缩的本质 4. 例子与启示 5. 定理的意义…...

2022年8月,​韩先超对中移信息进行微服务架构原理(Docker+k8s+DevOps+Go等)培训

2022年8月&#xff0c;​韩先超对中移信息进行微服务架构原理&#xff08;Dockerk8sDevOpsGo等&#xff09;培训 2022年8月&#xff0c;在企业数字化转型和云原生架构加速演进的背景下&#xff0c; 中移信息技术有限公司特别邀请云原生与DevOps领域专家 韩先超老师&#xff0c…...

【PostgreSQL数据分析实战:从数据清洗到可视化全流程】8.4 数据故事化呈现(报告结构设计/业务价值提炼)

&#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 文章大纲 8.4 数据故事化呈现&#xff1a;从报告结构到业务价值的深度融合一、数据故事化的核心价值体系&#xff08;一&#xff09;报告结构设计的黄金框架1. 业务场景锚定&#xff…...

Docker 核心目录结构

1. Docker 核心目录结构 数据存储目录 默认根目录&#xff1a;/var/lib/docker Docker 所有运行时数据&#xff08;镜像、容器、卷、网络配置等&#xff09;的默认存储位置。 bash 复制 下载 # 查看 Docker 数据根目录 docker info | grep "Docker Root Dir" # 输出…...

【工具推荐】Code2Prompt

DeepWiki工具可以帮我们快速理解 GitHub 项目&#xff0c;简直是理解陌生开源项目的利器&#xff01; 但是&#xff0c;它有个小小的“遗憾”——只能解析在线的 GitHub 项目。 如果是本地项目怎么办&#xff0c;还要特意上传&#xff0c;no&#xff0c;code2prompt 就是一款…...

OpenCV定位地板上的书

任务目标是将下面的图片中的书本找出来&#xff1a; 使用到的技术包括&#xff1a;转灰度图、提取颜色分量、二值化、形态学、轮廓提取等。 我们尝试先把图片转为灰度图&#xff0c;然后二值化&#xff0c;看看效果&#xff1a; 可以看到&#xff0c;二值化后&#xff0c;书的…...

Spring Cloud:概述,服务注册和服务发现,多机部署和负载均衡

什么是微服务 就是将一个大型的应用程序拆分成多而小的独立的服务模块&#xff0c;每个服务模块围绕某个业务功能建立&#xff0c;具有独立的数据库&#xff0c;服务栈&#xff0c;并通过轻量级的通信协议进行交互。 单体架构 就是将所有的业务和功能都打包在一个jar包中&…...

Linux的基础开发工具

目录 前言&#xff1a; 1、包管理器yum 1.1 软件包的依赖 1.2 镜像源 1.3 查找/安装/卸载软件 2、编辑器vim 2.1 命令模式(默认) 2.1.1 撤销与反撤销 2.1.2 光标定位 2.1.3 复制&&剪切(删除)&&粘贴 2.1.4 替换 2.1.5 插入模式 2.1.6 V-Block模式 …...

解锁跨平台开发的新时代——Compose Multiplatform

解锁跨平台开发的新时代——Compose Multiplatform 在当今移动和桌面应用程序开发领域,跨平台解决方案是开发者们梦寐以求的工具。而由JetBrains打造的Compose Multiplatform正是这样一款现代UI框架,它基于Kotlin技术,为开发者构建高性能且美观的用户界面提供了极大的便利和…...

键盘固件刷写详解:Bootloader

键盘固件刷写详解&#xff1a;从入门到精通 引言 作为一名机械键盘爱好者&#xff0c;相信大家都曾经面临过刷写固件的问题。无论是想要自定义按键功能&#xff0c;还是升级键盘的固件&#xff0c;掌握刷写技巧都是非常必要的。本文将全面介绍不同类型的引导加载程序&#xf…...

网络原理初识

本来想从网络的发展史开始写,之后再写网络的定义啥的,但快写完了才发现,这不课本教材吗,没劲,遂弃之,重撰,删芜就简.写点我认为,对程序员来说真正有用的东西 目录 IP地址 概念 格式 特殊地址 端口号 概念 格式 协议 概念 知名协议的默认端口 五元组 协议分层 OS…...

PVP鼠标推荐(deepseek)

下面有不懂的自行百度查找&#x1f44d; ❤️ 以下是几款在 双击性能&#xff08;DBC&#xff09; 和 拖拽点击&#xff08;DC&#xff09; 方面表现优秀的游戏鼠标推荐&#xff0c;结合了硬件性能、微动寿命以及玩家口碑&#xff1a; 1. 罗技 G102/G203 Lightsync 特点&#…...

Navee滑板车强势登陆中国,以智能科技重塑城市出行新风尚

当科技与潮流邂逅&#xff0c;城市出行迎来了一场前所未有的变革。全球智能出行领域的先锋品牌Navee&#xff0c;携其多款旗舰滑板车产品——ST3、GT3、V系列等&#xff0c;正式进军中国市场。凭借“颜值、性能、安全、智能”四大核心优势&#xff0c;Navee正以破竹之势重新定义…...

【Linux网络】网络命令

Ping Ping命令是一种用于测试网络连接状况的工具&#xff0c;在Windows、Linux、macOS等操作系统中都可以使用。以下是其详细介绍&#xff1a; 它主要通过向目标主机发送Internet控制报文协议&#xff08;ICMP&#xff09;的回声请求&#xff08;Echo Request&#xff09;数据…...