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

深入理解指针(一)

1.内存和地址

2.指针变量和地址

3.指针变量类型的意义

4.指针运算


1. 内存和地址

1.1 内存

在讲内存和地址之前,为了大家更好的理解举了这么个例子:

假如有一栋教学楼,刚好你今天在这栋楼的某一个课室上课,已知这栋楼有50个课室,但是没有编号,你的舍友来找你拿宿舍门钥匙, 如果想找到你,就得挨个教室去找,这样效率很低,但是我们如果根据楼层和楼层的教室的情况,给每个房间编上号,如:

一楼:101,102,103......

二楼:201,202,203......

. . . . . . . . . . . . . . . . . .

有了教室号,你的舍友知道你在那一间教室上课,就可以快速的找到你且拿到宿舍钥匙。生活中,给每个房间编写编号,就能提高效率,能快速地找到你想要找的房间位置。 

 

如果把上面的例子对照到计算机中,又是怎么样呢? 我们知道计算机上CPU(中央处理器)在处理数据的时候,需要的数据是在内存中读取的,处理后的数据也会放回内存中,那我们买电脑的时候,电脑上内存是 8GB/16GB/32GB 等,那这些内存空间如 何⾼效的管理呢? 其实也是把内存划分为⼀个个的内存单元,每个内存单元的大小取1个字节。 计算机中常见的单位(补充): ⼀个比特位可以存储⼀个2进制的位1或者0

内存单位:

  1. bit - 比特位
  2. Byte - 字节
  3. KB
  4. MB
  5. GB
  6. TB
  7. PB

 

 

  1. 1Byte = 8bit
  2. 1KB = 1024Byte
  3. 1MB = 1024KB
  4. 1GB = 1024MB
  5. 1TB = 1024GB
  6. 1PB = 1024TB

其中,每个内存单元,相当于⼀个教室,⼀个字节空间里面能放 8个比特位,就好比同学们住的八人间,每个人是⼀个比特位。 每个内存单元也都有⼀个编号(这个编号就相当
于宿舍房间的门牌号),有了这个内存单元的编号,CPU就可以快速找到⼀个内存空间。生活中我们把门牌号也叫地址,在计算机中我们 把内存单元的编号也称为地址。C语言中给 地址起了新的名字叫: 指针。 所以我们可以理解为: 内存单元的编号 == 地址 == 指针
1.2 究竟该如何理解编址

首先,必须理解,计算机内是有很多的硬件单 元,而硬件单元是要互相协同工作的。所谓的协同,至少相互之间要能够进行数据传递。但是硬件与硬件之间是互相独立的,那么如何通
信呢?答案很简单,用"线"连起来。而CPU和内存之间也是有⼤量的数据交互的,所以,两者必须也用线连起来。不过,我们今天关心一组线,叫做地址总线。CPU访问内存中的某个字节空间,必须知道这个字节空间在内存的什么位置,而因为内存中字节很多,所以需要给内存进行编址(就如同宿舍很 多,需要给宿舍编号⼀样)。 计算机中的编址,并不是把每个字节的地址记录下来,而是通过硬件设计完成的。钢琴、吉他 上面没有写上“剁、来、咪、发唆、拉、西”这样的信息,但演奏者照样能够准 确找到每⼀个琴弦的每⼀个位置,这是为何?因为制造商已经在乐器硬件层面上设计好了,并且 所有的演奏者都知道。本质是⼀种约定出来的共识

 


 

2. 指针变量和地址 

2.1 取地址操作符(&)

理解了内存和地址的关系,我们再回到C语言,在C语言中创建变量其实就是向内存申请空间,比如:

#include <stdio.h> 1
int main()
{int a = 10;return 0;
}

比如,上述的代码就是创建了整型变量a,内存中
申请4个字节,⽤于存放整数10,其中每个字节都
有地址,上图中4个字节的地址分别是:
  1. 0x00EEFAE4  0a  
  2. 0x00EEFAE5  00  
  3. 0x00EEFAE6  00  
  4. 0x00EEFAE7  00
那我们如何能得到a的地址呢?
这里就得学习⼀个操作符(&)-取地址操作符

 


#include <stdio.h>
int main()
{int a = 10;&a;//取出a的地址printf("%p\n", &a);return 0;
}

 按照我画图的例子,会打印处理:006FFD70 &a取出的是a所占4个字节中地址较小的字节的地址。虽然整型变量占用4个字节,我们只要知道了第⼀个字节地址,顺藤摸瓜访问到4个字节的数据也是可行的。

 2.2 指针变量和解引用操作符(*)

 

2.2.1 指针变量
那我们通过取地址操作符(&)拿到的地址是⼀个数值,比如:0x00EEFAE4 ,这个数值有时候也是需要存储起来,方便后期再使用的,那我们把这样的地址值存放在哪里呢?答案是:指针变量中。
比如:
#include <stdio.h>
int main()
{int a = 10;int* pa = &a;//取出a的地址并存储到指针变量pa中return 0;
}
指针变量也是⼀种变量,这种变量就是用来存放地址的,存放在指针变量中的值都会理解为地址。
2.2.2 如何拆解指针类型
我们看到pa的类型是 int* ,我们该如何理解指针的类型呢?
int a = 10;
int * pa = &a;
这里pa左边写的是 int* , * 是在说明pa是指针变量,而前面的 int 是在说明pa指向的是整型(int)
类型的对象。
char ch = 'w';
pc = &ch;//pc 的类型怎么写呢?
2.2.3 解引用操作符
我们将地址保存起来,未来是要使用的,那怎么使用呢?
在现实生活中,我们使用地址要找到⼀个房间,在房间里可以拿去或者存放物品。
C语言中其实也是⼀样的,我们只要拿到了地址(指针),就可以通过地址(指针)找到地址(指针) 指向的对象,这里·必须学习⼀个操作符叫解引用操作符(*)。
#include <stdio.h>
int main()
{int a = 100;int* pa = &a;*pa = 0;return 0;
}
上面代码中第6行就使用了解引用操作符, *pa 的意思就是通过pa中存放的地址,找到指向的空间, *pa其实就是a变量了;所以*pa = 0,这个操作符是把a改成了0。有同学肯定在想,这里如果目的就是把a改成0的话,写成 a = 0; 不就完了,为啥非要使用指针呢? 其实这里是把a的修改交给了pa来操作,这样对a的修改,就多了⼀种的途径,写代码就会更加灵活, 后期慢慢就能理解了。

 

2.3 指针变量的大小

前面的内容我们了解到,32位机器假设有32根地址总线,每根地址线出来的电信号转换成数字信号后是1或者0,那我们把32根地址线产生的2进制序列当做⼀个地址,那么⼀个地址就是32个bit位,需要4 个字节才能存储。 如果指针变量是用来存放地址的,那么指针变量的大小8就得是4个字节的空间才可以 同理64位机器,假设有64根地址线,⼀个地址就是64个⼆进制位组成的⼆进制序列,存储起来就需要8个字节的空间,指针变量的大小就是8个字节。

#include <stdio.h>
//指针变量的⼤⼩取决于地址的⼤⼩
//32位平台下地址是32个bit位(即4个字节)
//64位平台下地址是64个bit位(即8个字节)
int main()
{printf("%zd\n", sizeof(char*));printf("%zd\n", sizeof(short*));printf("%zd\n", sizeof(int*));printf("%zd\n", sizeof(double*));return 0;
}

 32位平台下地址是32个bit位(即4个字节):

 

64位平台下地址是64个bit位(即8个字节):

结论:
• 32位平台下地址是32个bit位,指针变量大小是4个字节
• 64位平台下地址是64个bit位,指针变量大小是8个字节
• 注意指针变量的大小和类型是无关的,只要指针类型的变量,在相同的平台下,大小都是相同的。

 

 

3. 指针变量类型的意义

指针变量的大小和类型无关,只要是指针变量,在同⼀个平台下,大小都是⼀样的,为什么还要有各种各样的指针类型呢? 其实指针类型是有特殊意义的,我们接下来继续学习。
3.1 指针的解引用
对比,下面2段代码,主要在调试时观察内存的变化。
代码1:
//代码1
#include <stdio.h>
int main()
{int n = 0x11223344;int* pi = &n;*pi = 0;return 0;
}

代码2:

#include <stdio.h>
int main()
{int n = 0x11223344;char* pc = (char*)&n;*pc = 0;return 0;
}
调试我们可以看到,代码1会将n的4个字节全部改为0,但是代码2只是将n的第⼀个字节改为0。
结论:指针的类型决定了,对指针解引用的时候有多大的权限(⼀次能操作几个字节)。
比如: char* 的指针解引⽤就只能访问⼀个字节,而int* 的指针的解引用就能访问四个字节。

3.2 指针+-整数

先看⼀段代码,调试观察地址的变化。
#include <stdio.h>
int main()
{int n = 10;char* pc = (char*)&n;int* pi = &n;printf("%p\n", &n);printf("%p\n", pc);printf("%p\n", pc + 1);printf("%p\n", pi);printf("%p\n", pi + 1);return 0;
}

运行结果: 

我们可以看出, char* 类型的指针变量+1跳过1个字节, int* 类型的指针变量+1跳过了4个字节。这就是指针变量的类型差异带来的变化。指针+1,其实跳过1个指针指向的元素。指针可以+1,那也可以-1。
结论:指针的类型决定了指针向前或者向后走⼀步有大(距离)

 

3.3 void* 指针
在指针类型中有⼀种特殊的类型是 void * 类型的,可以理解为无具体类型的指针(或者叫泛型指
针),这种类型的指针可以用来接受任意类型地址。但是也有局限性,void* 类型的指针不能直接进行指针的+-整数和解引用的运算。

 

例:
#include <stdio.h>
int main()
{int a = 10;int* pa = &a;char* pc = &a;return 0;
}
在上面的代码中,将⼀个int类型的变量的地址赋值给⼀个char*类型的指针变量。编译器给出了⼀个警告,是因为类型不兼容。而使用void*类型就不会有这样的问题, void* 类型的指针可以接收不同类型的地址,但是无法直接进行指针运算。

 


4. 指针运算

指针的基本运算有三种,分别是:
•   指针+- 整数
•    指针-指针
•   指针的关系运算
4.1 指针+整数
因为数组在内存中是连续存放的,只要知道第⼀个元素的地址,顺藤摸瓜就能找到后面的所有元素。
  1. int arr[10] = {1,2,3,4,5,6,7,8,9,10};

 代码:

#include <stdio.h>
//指针+- 整数
int main()
{int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };int* p = &arr[0];int i = 0;int sz = sizeof(arr) / sizeof(arr[0]);for (i = 0; i < sz; i++){printf("%d ", *(p + i));//p+i 这⾥就是指针+整数}return 0;
}

运行效果:

  

4.2 指针 - 指针

代码 :

#include <stdio.h>
int my_strlen(char* s)
{char* p = s;while (*p != '\0') //判断没有'\0';p++;return p - s;
}
int main()
{printf("%d\n", my_strlen("abcdef"));//存在'\0'有7个字符。return 0;
}

运行效果:

4.3 指针的关系运算 

代码: 

//指针的关系运算
#include <stdio.h>
int main()
{int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };int* p = &arr[0];int sz = sizeof(arr) / sizeof(arr[0]);while (p < arr + sz) //指针的⼤⼩⽐较{printf("%d ", *p);p++;}return 0;
}

 运行效果:


本章学习就到这啦!如果内容对你有用 ,请不忘三连支持一波!!!!

完。

 

相关文章:

深入理解指针(一)

1.内存和地址 2.指针变量和地址 3.指针变量类型的意义 4.指针运算 1. 内存和地址 1.1 内存 在讲内存和地址之前&#xff0c;为了大家更好的理解举了这么个例子&#xff1a; 假如有一栋教学楼&#xff0c;刚好你今天在这栋楼的某一个课室上课&#xff0c;已知这栋楼有50个…...

添加currentSchema后,该模式下表报不存在(APP)

文章目录 环境文档用途详细信息相关文档 环境 系统平台&#xff1a;Linux x86-64 Red Hat Enterprise Linux 7 版本&#xff1a;4.5.7 文档用途 解决程序URL添加currentSchema后&#xff0c;访问该模式下的表&#xff0c;报错信息com.highgo.jdbc.util.PSQLException: ERROR…...

Python数据整合与转换全攻略

在大数据时代&#xff0c;企业平均使用16个不同数据源&#xff0c;但数据利用率不足30%。数据整合与转换能力已成为数据工程师的核心竞争力。本文将通过电商订单数据整合实战&#xff0c;系统讲解Python数据整合与转换的核心技术栈。 一、数据整合的三大挑战与应对策略 1. 数…...

ArcGIS操作16:添加经纬网

1、单击视图 > 数据框属性 2、单击格网选项卡 > 新建格网按钮 3、创建经纬网 4、经纬网标注间隔需要自己多次尝试&#xff0c;选择一个合适的值&#xff0c;这里江苏省选择50 5、继续设置合适的参数 6、点击应用&#xff0c;预览是否合适&#xff08;不合适再新建一个经…...

BioID技术:探索蛋白质相互作用的新方法

在细胞的复杂环境中&#xff0c;蛋白质并非孤立地执行其功能&#xff0c;而是通过与其他蛋白质相互协作来完成各种生物学过程。理解蛋白质相互作用网络对于揭示细胞机制和疾病发生发展具有至关重要的意义。近年来&#xff0c;一种名为BioID&#xff08;Biotin Identification&a…...

Java 大视界——Java大数据在智慧交通智能停车诱导系统中的数据融合与实时更新

智慧交通的快速发展对城市停车资源的高效利用提出了更高要求&#xff0c;而智能停车诱导系统作为缓解“停车难”问题的核心手段&#xff0c;亟需解决多源数据融合、实时状态更新及高并发访问等挑战。Java凭借其稳定的大数据生态、卓越的实时计算能力及跨平台兼容性&#xff0c;…...

【Redisson】快速实现分布式锁

大家好&#xff0c;我是jstart千语。之前给大家分享过使用redis的set nx ex命令实现分布式锁。但手动的实现方式不仅麻烦&#xff0c;而且不好管理。实现出来的锁也是不可重入的&#xff0c;不可重试的。那么在要求比较高的系统中&#xff0c;就不太适用了。虽然说重入问题可以…...

内核常见面试问题汇总

1、Linux 中主要有哪几种内核锁?它们各自的特点和适用场景是什么? 自旋锁 自旋锁是一种忙等待锁,当一个线程试图获取一个被占用的自旋锁时,他会一直循环在那里,不断地检查锁是否可用,而不会进入睡眠状态。 自旋锁的优点这是在锁被持有的时间很短的情况下,性能非常高,…...

laravel中如何使用Validator::make定义一个变量是 ,必传的,json格式字符串

在 Laravel 中&#xff0c;使用 Validator::make 定义一个变量为必传且为JSON 格式字符串时&#xff0c;可以通过以下方式实现&#xff1a; use Illuminate\Support\Facades\Validator;$validator Validator::make($request->all(), [your_field > required|json, // 必…...

【全解析】EN18031标准下的NMM网络监控机制

上一篇文章我们了解了RLM机制如何为设备抵御DoS攻击保驾护航&#xff0c;今天我们将目光转向 EN18031 标准中的另一个重要防线——NMM&#xff08;Network Monitoring Mechanism&#xff09;网络监控机制。 NMM - 1规定&#xff0c;如果设备是网络设备&#xff0c;应提供网络监…...

浏览器开发随笔

浏览器多进程架构&#xff08;Chrome&#xff09; ----------------------------- | Browser Process | |-----------------------------| | UI 线程、主控、导航、安全策略 | -----------------------------| | |↓ ↓ ↓ -------…...

漏洞类型与攻击技术

1.1 SQL注入 1.1.1 SQL注入简介与原理 SQL注入是通过用户输入的数据中插入恶意SQL代码,绕过应用程序对数据库的合法操作,进而窃取、篡改或删除数据的攻击方式。核心原理是应用程序未对用户输入进行严格过滤,导致攻击者可以操控SQL语句逻辑。 1.1.2 联合查询注入与报…...

day018-磁盘管理-案例

文章目录 1. 磁盘分区1.1 手动磁盘分区1.2 重装系统&#xff0c;保留分区1.2.1 选择从光盘启动1.2.2 保留系统盘分区1.2.3 挂载数据盘 2. 物理服务器使用流程3. swap3.1 增加swap3.2 关闭swap 4. 故障案例&#xff08;红帽类系统&#xff09;4.1 root密码忘记&#xff0c;重新设…...

spark调度系统核心组件SparkContext、DAGSchedul、TaskScheduler介绍

目录 1. SparkContext2.DAGScheduler3. TaskScheduler4. 协作关系Spark调度系统的核心组件主要有SparkContext、DAGScheduler和TaskScheduler SparkContext介绍 1. SparkContext 1、资源申请: SparkContext是Spark应用程序与集群管理器(如Standalone模式下的Master、Yarn模…...

python数据可视化第三章数值计算基础

numpy库 数组创建 import numpy as np #创建n维数组array a np.array([1, 2, 3]) b np.array([4, 5, 6]) #可以直接运算 print(a 1) # [2 3 4] print(ab) # [5 7 9] #数组的维度&#xff1a;ndim print(a.ndim) #1 #数组的形状&#xff1a;shape print(a.shape) #(3,) 一维…...

std::chrono类的简单使用实例及分析

author: hjjdebug date: 2025年 05月 20日 星期二 14:36:17 CST descrip: std::chrono类的简单使用实例及分析 文章目录 1.实例代码:2. 代码分析:2.1 auto t1 std::chrono::high_resolution_clock::now();2.1.1 什么是 system_clock2.1.2 什么是 chrono::time_point?2.1.3 什…...

MongoDB 学习(三)Redis 与 MongoDB 的区别

目录 一、NoSQL 数据库与关系型数据库的优缺点二、Redis 与 MongoDB 的区别 MongoDB 和 Redis 都是 NoSQL 数据库&#xff0c;采用 结构型数据存储&#xff0c;而非 MySQL、Oracle 等则属于传统的 关系型数据库。 一、NoSQL 数据库与关系型数据库的优缺点 关系型数据库&#…...

Java双指针法:原地移除数组元素

Java双指针法&#xff1a;原地移除数组元素 代码解析关键点示例特点 代码解析 class Solution {public int removeElement(int[] nums, int val) {int cur 0; // 初始化一个指针 cur&#xff0c;表示新数组的当前写入位置for (int i 0; i < nums.length; i) { // 遍历原数…...

第二届帕鲁杯时空交织的密语

题目描述&#xff1a; 我们在暗网服务器中发现了一个神秘文件&#xff0c;据说是某个黑客组织的「时空密钥」&#xff0c;文件内容似乎由大量时间戳构成。情报显示&#xff0c;只有将时间维度与二进制低语结合才能解开秘密。线索隐藏在时空的起点与终点之间。 解压得到timestr…...

【神经网络与深度学习】扩散模型之原理解释

引言&#xff1a; 在人工智能的生成领域&#xff0c;扩散模型&#xff08;Diffusion Model&#xff09;是一项极具突破性的技术。它不仅能够生成高质量的图像&#xff0c;还可以应用于音频、3D建模等领域。扩散模型的核心思想来源于物理扩散现象&#xff0c;其工作方式类似于从…...

Map更简洁的编码构建

Map的链式构建需求 jdk1.8&#xff0c;编码时需要手动构建一个Map 传统Map构建方式 - 声明列表&#xff0c;依次添加元素&#xff1b; - 利用匿名内部类 实例初始化块&#xff0c;比较简洁声明并添加元素 //1 先声明创建 Map<String, Object> createMap new HashMap&…...

深挖navigator.webdriver浏览器自动化检测的底层分析

本文将带你深入探索并实践如何从底层层面破解浏览器 navigator.webdriver 检测&#xff0c;结合爬虫代理等策略伪装、多线程加速等技术&#xff0c;在豆瓣图书搜索页面上批量采集图书评分、简介、作者等信息。文章面向初学者&#xff0c;采用分步教程型结构&#xff0c;并增设「…...

业务流程和数据结构之间如何对应

业务流程和数据结构之间存在着紧密的对应关系&#xff0c;它们相互依赖、相互影响。以下是它们之间的对应关系以及如何进行对应&#xff1a; 1. 业务流程中的步骤与数据结构的记录 业务流程&#xff1a;业务流程是由一系列的步骤组成的&#xff0c;每个步骤都有明确的任务和目…...

浜掕仈缃戝ぇ鍘傞潰璇曪細璋㈤鏈虹殑鐖嗙瑧姹傝亴涔嬫梾

浜掕仈缃戝ぇ鍘傞潰璇曪細璋㈤鏈虹殑鐖嗙瑧姹傝亴涔嬫梾 绗竴杞細鍩虹鐭ヨ瘑杞扮偢 闈㈣瘯瀹&#xfffd;锛氭垜浠厛鑱婅亰Java鐨勫熀纭&#xfffd;鐭ヨ瘑锛岃阿椋炴満锛屼綘鑳借В閲婁竴涓婮ava涓殑HashMap鏄浣曞伐浣滅殑锛焅n 璋㈤鏈&#xfffd;锛氬摝…...

关于Linux服务器数字取证一

本次讲解apachemysql类型的基本类型 仿真 导入我们的检材 默认是仅主机模式&#xff0c;改成nat模式 查看ip地址 ip addr 修改虚拟机网卡配置 连通性测试 查找根目录 现在我们可以通过ip访问网站&#xff0c;但是网站处于关闭状态 接下来我们去查找配置文件&#xff0c;去…...

电商运营数据分析指南之流量指标

本文电商运营数据分析指南之流量指标主要面向电商行业新人&#xff0c;针对数据分析师/运营人员日常监控中的常见困惑提供解决方案。适合刚接触电商数据监控缺乏思路&#xff0c;或对电商数据指标感兴趣希望系统学习的读者。 电商数据分析如同航海指南针&#xff0c;精准的数据…...

C++初阶-迭代器失效和vector::insert函数的最终实现

目录 1.vector::insert函数 1.1问题分析 1.2vector::insert函数的最终实现 1.3vector::insert函数的分析 2.第二种迭代器失效 3.第三种迭代器失效 4.迭代器失效deepseek的回答 1. 迭代器失效的原因 2. 不同容器的迭代器失效情况 &#xff08;1&#xff09;std::vecto…...

DeepSeek的走红,会不会带动芯片市场新一轮增长?

在大模型竞赛如火如荼的今天&#xff0c;国产AI大模型DeepSeek的迅速走红&#xff0c;无疑为中国AI行业注入了新的活力。从技术突破到商业落地&#xff0c;DeepSeek不仅在技术圈引发了广泛关注&#xff0c;也让“AI大模型”这一关键词再次登上产业链的风口浪尖。但一个更值得深…...

小土堆pytorch--神经网路-卷积层池化层

神经网路-卷积层&池化层 一级目录二级目录三级目录 1. 神经网路-卷积层2. 神经网路最大池化的应用 一级目录 二级目录 三级目录 1. 神经网路-卷积层 在PyTorch中&#xff0c;torch.nn.Conv2d函数定义了一个二维卷积层&#xff0c;其常用参数包括&#xff1a; in_channel…...

什么叫生成式人工智能?职业技能的范式转移与能力重构

当人们谈论人工智能时&#xff0c;常常混淆其不同类型与功能。生成式人工智能作为AI领域的重要分支&#xff0c;其本质不在于分析或分类已有数据&#xff0c;而在于创造新的内容——无论是文本、图像、音乐还是代码。理解这一技术的内涵&#xff0c;不仅关乎技术认知&#xff0…...

集星獭 | 重塑集成体验:新版编排重构仿真电商订单数据入库

概要介绍 新版服务编排以可视化模式驱动电商订单入库流程升级&#xff0c;实现订单、客户、库存、发票、发货等环节的自动化处理。流程中通过循环节点、判断逻辑与数据查询的编排&#xff0c;完成了低代码构建业务逻辑&#xff0c;极大提升订单处理效率与业务响应速度。 背景…...

小白成长之路-Linux磁盘管理(一)

文章目录 前言一、磁盘介绍1、磁盘的物理结构1.1硬盘结构1.2磁头数、磁道、柱面、扇区 2.CHS编号2.1磁道编号规则2.3扇区编号规则2.3通过CHS计算硬盘容量 3、磁盘存储划分3.1第一个扇区存储的数据3.2硬盘分区 4.开机流程5、要点6、磁盘存储数据的形式 二、Linux文件系统1、根文…...

【Linux】第二十四章 管理网络安全

1. 防火墙在 Linux 系统安全中有哪些重要的作用&#xff1f; 防止未经授权的访问 网络流量过滤&#xff0c;常见过滤方式包括&#xff1a;基于 IP 地址、端口、协议类型&#xff08;如 TCP、UDP&#xff09;、源和目标地址等。限制流量速率、阻止来自单个IP或多个IP的高频请求保…...

【解决】SSH 远程失败之路由配置问题

开发平台&#xff1a;RedHat 8   一、问题描述 使用 WindTerm SSH 远程连接 192.168.88.211 虚拟主机&#xff0c;无法连接。   二、问题追溯 VMWare 虚拟机配置 虚拟网卡IPVMNet 模式应用网卡1&#xff08;eth0&#xff09;192.168.88.11/24VMNet 8服务网卡2&#xff08;…...

中级网络工程师知识点9

1.在Linux中&#xff0c;负责配置DNS的文件是/etc/resolv.conf&#xff0c;包含了主机的域名搜索顺序和DNS服务器的地址 2.主域名服务器在接收到域名请求后&#xff0c;首先查询的是本地缓存 3.自动专用地址&#xff1a;169.254.X.X/16 4.FTP默认20端口&#xff0c;传输文件…...

网页前端开发(基础)

前端开发三件客&#xff1a;HTML&#xff0c;CSS&#xff0c;JavaScript。 web标准&#xff0c;也称网页标准&#xff0c;由3个组成部分。1.HTML,管理页面的元素和内容。2.CSS&#xff0c;负责网页的表现&#xff08;页面元素的外观&#xff0c;位置等页面样式。如&#xff1a;…...

Git命令使用全攻略:从创建分支到合并的完整流程

Git命令使用全攻略&#xff1a;从创建分支到合并的完整流程 引言一、初始化项目与基础配置1.1 克隆远程仓库1.2 查看当前分支状态 二、创建与管理分支2.1 从main分支创建新功能分支2.2 查看分支列表2.3 提交代码到新分支2.4 推送分支到GitHub 三、版本发布与标签管理3.1 创建轻…...

边缘智能与量子计算双轮驱动:IVX 开启实时 AI 开发新维度

一、技术跃迁&#xff1a;量子化组件架构如何颠覆传统 AI 开发流程 在传统 AI 开发范式中&#xff0c;将 GPT-4o、Mediapipe 等模型集成到业务系统需要经历 "模型训练 - API 对接 - 前端适配" 的三重技术壁垒。开发团队需同时掌握 TensorFlow、Flask、React 等技术栈…...

对冲策略加仓止损盈思路

外汇交易中的对冲策略&#xff0c;重点在于加仓和盈利出局的策略。该策略通过多种方法来管理头寸&#xff0c;旨在最大化盈利并控制风险。 加仓策略 金字塔加仓法 金字塔加仓法是一种逐步增加头寸的方法。在初始头寸盈利后&#xff0c;以较小的手数逐步增加头寸。这种方法可以在…...

ERP生产环境索引重建:高风险操作还是性能良药?何时动手,如何操刀?

ERP系统是企业运营的核心,其数据库性能至关重要。索引作为提升查询效率的关键,其维护(尤其是重建)操作却常常让DBA和运维工程师们如履薄冰。本文将深入探讨在生产ERP环境中重建索引的潜在风险、必要性评估、最佳实践以及不同数据库的注意事项,旨在帮助技术人员做出明智决策…...

PyTorch 之 torch.distributions.Categorical 详解

PyTorch 之 torch.distributions.Categorical 详解 PyTorch 之 torch.distributions.Categorical 详解一、创建分类分布&#xff08;一&#xff09;基本语法&#xff08;二&#xff09;示例 二、采样&#xff08;一&#xff09;方法&#xff08;二&#xff09;示例 三、计算概率…...

杰发科技AC7840——如何把结构体数据写到Dflash中

1. 结构体数据被存放在Pflash中 正常情况下&#xff0c;可以看到全局变量的结构体数据被存放在Pflash中 数字部分存在RAM中 2. 最小编程单位 8字节编程&#xff0c;因此如果结构体存放在Dfalsh中&#xff0c;进行写操作&#xff0c;需要写8字节的倍数 第一种办法&#xff1a;…...

vue路由小案例

vue路由小案例 案例需求案例实现小结 案例需求 创建二级路由&#xff0c;掌握嵌套路由点击内容&#xff0c;根据不同id实现页面的跳转&#xff0c;掌握传参方式利用routerlink标签封装的类&#xff0c;实现高亮实现重定向&#xff0c;自动跳转到二级页面 案例实现 &#xff…...

链表面试题9之环形链表进阶

那么上一题我们已经知道了双指针的变法以及拓展的用法&#xff0c;那么这里我们直接难度升级。 想回去复习的这里放个链接&#xff1a;链表的面试题8之环形链表-CSDN博客 题目链接&#xff1a;142. 环形链表 II - 力扣&#xff08;LeetCode&#xff09; 我们来看这道题目主要…...

CentOS 7上BIND9配置DNS服务器指南

详细说明如何在 CentOS 7 上配置 BIND9 扮演这四种不同的 DNS 角色&#xff0c;包括配置文件示例和注意事项。 BIND9 可以扮演 DNS 体系中的多种角色&#xff1a; 权威DNS服务器 (Authoritative DNS Server): 存储特定域名&#xff08;例如 example.com&#xff09;的官方DNS记…...

Pytorch针对不同电脑配置详细讲解+安装(CPU)

一、前言 安装pytorch前&#xff0c;应按照我前边的博文中&#xff0c;安装完anaconda和pycharm&#xff0c;并且配置完环境变量以后哈。 Pytorch是什么&#xff1f; 它是一个库,是一个开源的机器学习框架&#xff0c;专注于深度学习任务&#xff0c;由Facebook的人工智能研…...

知识体系_数据分析挖掘_基尼系数

1 概述 基尼系数(gini coefficient)表示在全部居民收入中,用于进行不平均分配的那部分收入占总收入的百分比。社会中每个人的收入都一样、收入分配绝对平均时,基尼系数是0;全社会的收入都集中于一个人、收入分配绝对不平均时,基尼系数是1。现实生活中,两种情况都不可能发…...

Fiddler抓包教程->HTTP和HTTPS基础知识

1.简介 有的伙伴可能会好奇&#xff0c;不是讲解和分享抓包工具,怎么这里开始讲解HTTP和HTTPS协议了。这是因为你对HTTP协议越了解&#xff0c;你就能越掌握Fiddler的使用方法&#xff0c;反过来你越使用Fiddler&#xff0c;就越能帮助你了解HTTP协议。 Fiddler无论对开发人员…...

超级维特根斯坦

AI智能体核心指令:语言智慧融合体 - 深度思辨、专业应用与协同创新大师 1. 角色设定 (Persona) 你将扮演一位“语言智慧融合体”AI,一个集大成的、具备卓越情境智能、精妙引导艺术与长时程战略规划能力的语言思想、艺术与应用科学伙伴。你的核心人格与方法论基于以下杰出贡…...

探索付费社群的成功之道:生财与群响的深度解析

随着互联网技术的发展和用户需求的多样化&#xff0c;付费社群作为一种新型商业模式逐渐崭露头角&#xff0c;并迅速成为众多创业者和个人寻求知识、资源以及人脉的重要平台。本文将深入探讨两个成功的付费社群——生财和群响&#xff0c;分析它们如何在各自领域内取得显著成就…...