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

【C语言】const修饰符在指针变量中的作用详解


在这里插入图片描述

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳]
本文专栏: C语言

文章目录

  • 💯前言
  • 💯指针与解引用:基础概念
    • 1. 指针变量
    • 2. 解引用操作
  • 💯`const` 修饰指针变量的三种主要情况
    • 1. 情况一:`int * const p` (指针本身是常量)
    • 2. 情况二:`int const * p` 或 `const int * p` (指针指向的内容是常量)
    • 3. 情况三:`int const * const p` (指针本身和指针指向的内容都是常量)
  • 💯三种情况的关键区别总结
  • 💯记忆方法
  • 💯实际应用场景
  • 💯小结


在这里插入图片描述


💯前言

  • const 关键字在 C/C++ 编程中占据着极为重要的地位,其核心在于确保数据的不可变性,从而提升代码的鲁棒性安全性。通过使用 const,开发者能够有效避免非预期的数据修改行为,这对于构建健壮可维护的软件至关重要。
    本文旨在对 const指针变量中的多种应用场景进行深入探讨,详细阐述其在不同位置时的语义,以及这些语义如何影响指针的使用方式应用场景
    C
    在这里插入图片描述

💯指针与解引用:基础概念

在探讨 const 修饰符对指针的影响之前,我们首先需要明确指针及其解引用的基本概念。指针是一种用于存储内存地址的变量,可以通过该内存地址对另一个变量进行访问和操作。指针的主要优势在于提供了一种对内存进行直接操作的手段,能够灵活地实现数据的共享和修改。解引用操作则是通过指针访问其所指向的内存区域,从而对该内存位置的值进行读取或修改。

在这里插入图片描述


1. 指针变量

在这里插入图片描述

int a = 10;
int *p = &a;

在上述代码中:

  • p 是一个指针变量,存储了 a 的内存地址。
  • *p 是对指针 p 的解引用,表示对 p 所指向的内存地址中的内容进行访问。

指针变量在编程中具有广泛的应用,尤其是在需要直接操作内存的情况下,例如数组操作、动态内存分配以及函数参数传递等。指针使得程序得以更有效率地进行数据操作,特别是在涉及大规模数据的复杂场景中。


2. 解引用操作

在这里插入图片描述

*p = 20;

通过 *p 可以修改 p 所指向变量的值,从而将 a 的值从 10 修改为 20。这种特性使得指针成为了操作内存的强大工具,既可以用于读取值,也可以用于修改值。

解引用操作相当于在指针和实际数据之间架起了一座桥梁,通过指针访问到数据本身。值得注意的是,解引用未初始化的指针会导致未定义行为,甚至可能导致程序崩溃。因此,指针在使用之前必须正确初始化,以确保程序的稳定性和安全性。


💯const 修饰指针变量的三种主要情况

const 修饰符用于表示某些数据的不可修改性。具体地,根据 const 在指针声明中的位置不同,其作用也有所不同。通过合理使用 const,我们可以有效控制指针及其所指向数据的可变性,增强程序的健壮性。接下来,我们将详细探讨 const 在指针声明中的三种主要情况。
在这里插入图片描述


1. 情况一:int * const p (指针本身是常量)

在这里插入图片描述

int a = 10;
int b = 20;
int * const p = &a;
  • 定义含义

    • 在这段代码中,p 是一个指针变量,指向变量 a 的地址。
    • p 是一个 常量指针,即指针本身的值(即存储的地址)是常量,这意味着一旦 p 被初始化,它的值就不可再改变。
  • 限制

    • 指针 p 的指向不可改变。也就是说,p 一旦指向了 a,就不能再指向 b 或其他变量。
    • 例如,以下代码会导致编译错误:
      p = &b; // 错误:常量指针的指向不能修改
      
  • 允许

    • 可以通过 *p 修改 p 所指向的变量的内容,即可以修改 a 的值:
      *p = 100; // 可以修改指针指向的内容
      
    • 这意味着,虽然指针的指向不能改变,但指针指向的变量的值是可以修改的。

这种情况在需要保证指针始终指向同一个变量,但允许修改该变量的内容时非常有用。尤其是在涉及硬件寄存器编程或者关键资源管理的场景下,确保指针地址保持不变对于避免指针错误带来的不确定性至关重要。


2. 情况二:int const * pconst int * p (指针指向的内容是常量)

在这里插入图片描述

int a = 10;
int b = 20;
int const * p = &a;
  • 定义含义

    • 在这段代码中,p 是一个指向 a 的指针。
    • p 是一个 指向常量的指针,即通过指针访问的内容是常量,这意味着不能通过 *p 来修改 a 的值。
  • 限制

    • 不能通过指针修改指针所指向内容的值:
      *p = 100; // 错误:不能通过 p 修改指针指向的内容
      
    • const 修饰了 *p,因此通过指针访问到的变量值是只读的,不能被修改。
  • 允许

    • 可以修改指针 p 的指向,使其指向其他变量:
      p = &b; // 可以修改指针的指向
      
    • 这意味着,p 可以指向其他的整型变量,但不能通过 p 修改它所指向的变量的值。

这种情况通常用于保护通过指针传递的数据不被修改,尤其是在函数参数中使用时。这样可以有效防止意外修改,确保数据的完整性和安全性,是编写高可靠性代码的重要手段之一。


3. 情况三:int const * const p (指针本身和指针指向的内容都是常量)

在这里插入图片描述

int a = 10;
int const * const p = &a;
  • 定义含义

    • 在这段代码中,p 是一个指针,指向变量 a 的地址。
    • 指针 p 本身是常量,这意味着 p 一旦被初始化指向某个变量,就不能再指向其他变量。
    • 指针指向的内容也是常量,这意味着通过 *p 不能修改 p 所指向的内容的值。
  • 限制

    • 指针的指向不可修改
      p = &b; // 错误:不能修改指针的指向
      
    • 指针指向的内容不可修改
      *p = 100; // 错误:不能修改指针指向的内容
      

这种声明方式提供了双重的保护,确保指针本身及其指向的内容均不可变。这种情况非常适合用在需要完全保护数据的场景,例如某些只读的全局配置数据,防止任何形式的修改操作,从而确保系统的稳定性。


💯三种情况的关键区别总结

在这里插入图片描述

类型声明限制内容允许内容
int * const p指针的指向不可修改可以通过 *p 修改指针指向的内容
int const * pconst int * p指针指向的内容不可修改可以修改指针的指向
int const * const p指针的指向不可修改,指针指向的内容不可修改

从表中可以看出,关键区别在于:

  • int * const p 中,const 修饰的是指针本身,因此 指针的指向不可变
  • int const * pconst int * p 中,const 修饰的是指针指向的内容,因此 指针所指向的内容不可修改
  • int const * const p 中,两个 const 修饰符确保了 既不能改变指针的指向,也不能改变指针指向的内容

理解这些细微差异对于编写高质量、可维护性强的代码至关重要。通过合理使用 const 关键字,可以显著提高代码的可读性,减少潜在的错误,尤其是在涉及复杂指针操作的情境中。


💯记忆方法

在这里插入图片描述
为了更好地记忆这些规则,可以遵循以下思路:

  1. 如果 const*右边(如 int * const p),那么它修饰的是指针变量 p,表示 指针本身是常量
  2. 如果 const*左边(如 const int * p),那么它修饰的是指针指向的内容,表示 内容是常量,通过指针不能修改内容。
  3. 如果两个位置都有 const(如 int const * const p),则表示 指针本身和指针指向的内容均不可修改

这种记忆方式有助于在书写和阅读代码时快速判断 const 修饰符的含义和作用。可以简单记住,“右边修饰指针,左边修饰内容”,这种方式能够帮助程序员在面对复杂代码时快速理解指针和数据之间的关系,从而提高代码的开发效率和可维护性。


💯实际应用场景

在这里插入图片描述

  • int const * p / const int * p(指向常量的指针)

    • 在函数参数中经常用到,目的是防止通过指针修改传入的参数值。
    • 例如,当需要将一个变量地址传递给函数,但函数不应该修改该变量的值时,可以使用这种方式:
      void printValue(const int *p) {printf("%d\n", *p);// *p = 10; // 错误,无法修改值
      }
      
    • 通过这种方式,可以确保函数只能读取数据,而不能对数据进行修改。这对于提高代码的安全性非常有效,特别是在处理一些需要保护的关键数据时。
  • int * const p(常量指针)

    • 在某些情况下,需要确保指针始终指向同一个内存位置,而不允许被改变。例如在操作某些关键资源时,指针的地址保持固定非常重要:
      int a = 10;
      int * const p = &a;
      *p = 20;  // 可以修改指向的值
      // p = &b; // 错误,不能修改指针的指向
      
    • 这种情况在多线程编程中尤为重要。例如,共享的变量地址需要始终指向固定的位置,但可以在程序中对其内容进行修改。通过使用常量指针,可以防止指针本身被其他线程无意修改,从而提高程序的健壮性。
  • const int * const p(常量指向常量的指针)

    • 当既不允许修改指针指向的变量,也不允许修改指针的指向时,可以使用这种声明方式。例如,保护某些关键配置,使其既不能被指针重新指向其他位置,也不能通过指针修改内容:
      const int value = 50;
      const int * const p = &value;
      // *p = 60; // 错误,不能修改指针指向的内容
      // p = &b; // 错误,不能修改指针的指向
      
    • 在嵌入式系统中,常常需要确保某些参数既不可被改变也不可被重新指向,这种修饰方式提供了强有力的数据保护,保证系统行为的确定性。

💯小结

  • 在这里插入图片描述
    通过这篇文章,我们深入探讨了 const 修饰符在指针变量中的不同使用方式,并详细分析了它们的区别及其具体应用场景。总结如下:

  • const 的位置决定了它修饰的对象是 指针本身 还是 指针指向的内容

    • 如果 const* 的右边,则指针本身不可修改
    • 如果 const* 的左边,则指针指向的内容不可修改
  • 合理使用 const 可以极大提高代码的安全性稳定性,防止无意的数据修改行为,从而提升代码的可维护性

  • const 的正确使用不仅有助于提升代码的可读性,还能够有效减少由于指针误操作所导致的各种潜在风险

在日常开发中,合理使用 const 能够提升代码质量,尤其是在涉及复杂系统编程或者多线程编程的情况下,通过对指针和数据的严格控制,可以避免许多难以调试的错误,从而编写出更为健壮高效的程序。理解并正确运用这些关键概念,是成为高水平 C/C++ 开发者的必由之路。


在这里插入图片描述


相关文章:

【C语言】const修饰符在指针变量中的作用详解

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C语言 文章目录 💯前言💯指针与解引用:基础概念1. 指针变量2. 解引用操作 💯const 修饰指针变量的三种主要情况1. 情况一:int * const p (指针本…...

阿里云ECS服务器监控报警配置

背景:服务器偶尔会异常,比如CPU过载,磁盘满,影响使用,人工盯服务器不现实 采用方法:阿里云监控告警功能 步骤: 第一步:登录阿里云服务器 https://account.aliyun.com/login/logi…...

高性能linux服务器运维实战小结 性能调优工具

性能指标 进程指标 进程关系 父进程创子进程时,调fork系统调用。调用时,父给子获取一个进程描述符,并设置新的pid,同事复制父进程的进程描述符给子进程,此时不会复制父进程地址空间,而是父子用相同地址空…...

初识Linux—— 基本指令(下)

前言: 本篇继续来学习Linux的基础指令,继续加油!!! 本篇文章对于图片即内容详解,已同步到本人gitee:Linux学习: Linux学习与知识讲解 Linux指令 1、查看文件内容的指令 cat ​ cat 查看文件…...

【Linux】线程的互斥和同步

【Linux】线程的互斥和同步 线程间的互斥 临界资源:多线程执行共享的资源就叫做临界资源临界区:每个线程内部,访问临界资源的代码,就叫做临界区互斥:任何时刻,互斥保证有且只有一个执行流进入临界区&#…...

详解Oracle表的类型(二)

1.引言: Oracle数据库提供了多种表类型,以满足不同的数据存储和管理需求。本博文将对Oracle分区表及使用场景进行详细介绍。 2. 分区表 分区表是Oracle数据库中一种重要的表类型,它通过将表数据分割成多个逻辑部分来提高查询性能、管理灵活…...

VSCode 下载 安装

VSCode【下载】【安装】【汉化】【配置C环境(超快)】(Windows环境)-CSDN博客 Download Visual Studio Code - Mac, Linux, Windowshttps://code.visualstudio.com/Downloadhttps://code.visualstudio.com/Download 注意&#xff0…...

java中的最小堆

概述 最小堆minHeap指的级别n的每个节点存储的值小于或等于级别n1的子节点的值。因此,根就存储了其中最小的值。 注意节点的值与其他兄弟节点的值之间没有必然关系。 java中最小堆的表示 利用数组 常用的是利用数组minHeap[]表示,将最小堆的节点或值…...

ES实用面试题

一、es是什么,为什么要用它? ES通常是Elasticsearch的简称,它是一个基于Lucene构建的开源搜索引擎。Elasticsearch以其分布式、高扩展性和实时数据分析能力而闻名,广泛用于全文搜索、日志分析、实时监控等多种场景。 基本特点&am…...

数据结构 (7)线性表的链式存储

前言 线性表是一种基本的数据结构,用于存储线性序列的元素。线性表的存储方式主要有两种:顺序存储和链式存储。链式存储,即链表,是一种非常灵活和高效的存储方式,特别适用于需要频繁插入和删除操作的场景。 链表的基本…...

数据结构:链表进阶

链表进阶 1. ArrayList的缺陷2. 链表2.1 链表的概念及结构2.2 链表的实现 3.链表面试题4.LinkedList的使用5.1 什么是LinkedList4.2 LinkedList的使用 5. ArrayList和LinkedList的区别 1. ArrayList的缺陷 通过源码知道,ArrayList底层使用数组来存储元素&#xff1…...

Can UDS 学习记录

目录 Can UDS 学习记录10 03 响应否定响应22和24 的说明27服务肯定响应抑制位 Can UDS 学习记录 10 03 响应 否定响应22和24 的说明 0x22条件不正确,就是不满足服务端的运行条件0x24请求顺序错误;停止例程的请求必须在开始例程后面才可以,请…...

C 语言实现的优先级队列

C 语言实现的优先级队列 priorityqueue.h /******************************************************************************* * Copyright © 2024-2025 Light Zhang <mapawarehotmail.com>, MapAware, Inc. * * ALL RIGHTS RESERVED. …...

卷积神经网络(CNN)中的批量归一化层(Batch Normalization Layer)

批量归一化层&#xff08;BatchNorm层&#xff09;&#xff0c;或简称为批量归一化&#xff08;Batch Normalization&#xff09;&#xff0c;是深度学习中常用的一种技术&#xff0c;旨在加速神经网络的训练并提高收敛速度。 一、基本思想 为了让数据在训练过程中保持同一分布…...

HDR视频技术之四:HDR 主要标准

HDR 是 UHD 技术中最重要维度之一&#xff0c;带来新的视觉呈现体验。 HDR 技术涉及到采集、加工、传输、呈现等视频流程上的多个环节&#xff0c;需要定义出互联互通的产业标准&#xff0c;以支持规模化应用和部署。本文整理当前 HDR 应用中的一些代表性的国际标准。 1 HDR 发…...

下一个阶段的生产工具更换:

开源竞争&#xff1a; 当你无法彻底掌握技术的时候&#xff0c;就开源这个技术&#xff0c;让更多的人了解这个技术&#xff0c;形成更多的技术依赖&#xff0c;你会说&#xff0c;这不就是在砸罐子吗&#xff1f;一个行业里面总会有人砸罐子的&#xff0c;你不如先砸罐子&…...

性能优化--CPU微架构

一 指令集架构 Intel X86, ARM v8, RISC-V 是当今广泛使用的指令架构的实例。 大多数现代架构可以归类为基于通用寄存器的加载和存储型架构&#xff0c;在这种架构下&#xff0c;操作数倍明确指定&#xff0c;只能使用夹在和存储指令访问内存。除提供基本的功能之外&#xff0c…...

3.3_1 差错控制(检错编码)

目录 1、差错来源 全局性 局部性 2、数据链路的差错控制 ​编辑奇偶校验码 CRC循环冗余码 接收端检错过程 1、差错来源 概括来说&#xff0c;传输中的差错都是由于噪声引起的。 全局性 由于线路本身电气特性所产生的随机噪声(热噪声)&#xff0c;是信道固有的&#xf…...

2024年wordpress、d-link等相关的多个cve漏洞poc

⚠️ 漏洞 ✅ CVE-2024-10914 在D-Link DNS-320、DNS-320LW、DNS-325和DNS-340L中发现的漏洞&#xff0c;版本直到20241028 GET /cgi-bin/account_mgr.cgi?cmdcgi_user_add&name%27;id;%27 HTTP/1.1✅ CVE-2024-11305 在Altenergy Power Control Software中发现的关键…...

影视后期学习Ⅰ~

1.DV是光盘 磁带 2.序列就是我们要制作的一个视频。 打开界面显示&#xff1a; 一号面板放的是素材&#xff0c;二号面板叫源监视器面板&#xff08;它的名字需要记住&#xff09;在一号面板点击文件之后&#xff0c;进入二号面板&#xff0c;在二号面板预览没问题后&#xf…...

如何安全删除 Linux 用户帐户和主目录 ?

Linux 以其健壮性和灵活性而闻名&#xff0c;是全球服务器和桌面的首选。管理用户帐户是系统管理的一个基本方面&#xff0c;包括创建、修改和删除用户帐户及其相关数据。本指南全面概述了如何在 Linux 中安全地删除用户帐户及其主目录&#xff0c;以确保系统的安全性和完整性。…...

【软件测试】设计测试用例的万能公式

文章目录 概念设计测试用例的万能公式常规思考逆向思维发散性思维万能公式水杯测试弱网测试如何进行弱网测试 安装卸载测试 概念 什么是测试用例&#xff1f; 测试⽤例&#xff08;Test Case&#xff09;是为了实施测试⽽向被测试的系统提供的⼀组集合&#xff0c;这组集合包…...

【MySQL】字符集与排序规则

1. 字符集 1.1 一些重要的字符集 1.1.1 ASCII 共收录128个字符&#xff0c;包括空格、标点符号、数字、大小写字母和一些不可见字符。由于总共才128个字符&#xff0c;所以可以使用1个字节来进行编码 1.1.2 ISO-8859-1 共收录 256 个字符&#xff0c;是在 ASCII 字符集的基…...

局域网与广域网:探索网络的规模与奥秘(3/10)

一、局域网的特点 局域网覆盖有限的地理范围&#xff0c;通常在几公里以内&#xff0c;具有实现资源共享、服务共享、维护简单、组网开销低等特点&#xff0c;主要传输介质为双绞线&#xff0c;并使用少量的光纤。 局域网一般是方圆几千米以内的区域网络&#xff0c;其特点丰富…...

C++从零到满绩——类和对象(中)

目录 1>>前言 2>>构造函数&#xff08;我称之为初始化函数&#xff09; 3>>析构函数&#xff08;我称之为销毁函数&#xff09; 4>>拷贝构造函数&#xff08;我称之为复制函数&#xff09; 5>>运算符重载 5.2>>赋值运算符重载 ​编辑…...

MFC工控项目实例三十一模拟量转化为工程量

实测工程量值&#xff08;变送器量程最大值-变送器量程最小值&#xff09;/&#xff08;数字量最大值-数字量最小值&#xff09;*&#xff08;当前采集工程量值-零点误差值&#xff09;。 相关程序代码 SEAL_PRESSURE.h class CSEAL_PRESSUREApp : public CWinApp { public:C…...

ESP32学习笔记_FreeRTOS(2)——Queue

摘要(From AI): 在嵌入式系统开发中&#xff0c;任务之间的高效通信是实现多任务协作的关键。FreeRTOS 提供了强大的队列机制&#xff0c;支持任务之间安全、灵活地传递数据&#xff0c;是实现任务同步和事件通知的核心工具。本篇博客将全面解析 FreeRTOS 队列的工作原理和应用…...

Project Manager工程管理器详细说明

1前言 STM32CubeMX的Project Manager工程管理器包含:Project工程管理、 Code Generator代码生成、 Advanced Settings高级设置三部分内容。 这三部分内容决定了工程的一些属性,相关的配置信息比较重要,也容易理解。初学者有必要掌握其中内容。 2Project工程管理 Project工…...

vue el-table表格点击某行触发事件操作栏点击和row-click冲突问题

文章为本新手菜鸡的问题记录&#xff0c;如有错误和不足还请大佬指正 文章目录 前言一、点击el-table表格某行&#xff0c;触发事件二、解决el-table的操作栏点击和row-click冲突问题1.问题&#xff1a;2.解决方法 前言 文章主要解决两个问题&#xff1a; 1、点击el-table表格…...

吸猫毛空气净化器哪个好?推荐除猫毛效果好的宠物空气净化器品牌

我家里养了五只猫咪&#xff0c;每天睡醒准备来杯咖啡的时候&#xff0c;总能看见猫毛。最尴尬的是这种现象&#xff0c;哪哪都有。养猫人真的每天都要生活在这个世界里面。平时和猫咪玩耍的时候也没有发现这么多猫毛啊。现在一到冬天不能开窗户&#xff0c;真的超级难受感觉每…...

Reactor 模式的理论与实践

1. 引言 1.1 什么是 Reactor 模式&#xff1f; Reactor 模式是一种用于处理高性能 I/O 的设计模式&#xff0c;专注于通过非阻塞 I/O 和事件驱动机制实现高并发性能。它的核心思想是将 I/O 操作的事件分离出来&#xff0c;通过事件分发器&#xff08;Reactor&#xff09;将事…...

VSCode 汉化教程【简洁易懂】

VSCode【下载】【安装】【汉化】【配置C环境&#xff08;超快&#xff09;】&#xff08;Windows环境&#xff09;-CSDN博客 我们安装完成后默认是英文界面。 找到插件选项卡&#xff0c;搜索“Chinese”&#xff0c;找到简体&#xff08;更具你的需要&#xff09;&#xff08;…...

cookie反爬----普通服务器,阿里系

目录 一.常见COOKIE反爬 普通&#xff1a; 1. 简介 2. 加密原理 二.实战案例 1. 服务器响应cookie信息 1. 逆向目标 2. 逆向分析 2. 阿里系cookie逆向 1. 逆向目标 2. 逆向分析 实战&#xff1a; 无限debugger原理 1. Function("debugger").call() 2. …...

【计算机网络】计算机网络概述

当我们决定要谈谈网络的时候&#xff0c;我想在谈之前&#xff0c;有必要了解一下“协议”这个词。协议&#xff0c;定义了在俩个或者多个通信实体之间交换报文的格式和次序&#xff0c;以及报文发送、接收报文或者其他的事件所采取的动作。定义都比较晦涩&#xff0c;那就让我…...

微信小程序条件渲染与列表渲染的全面教程

微信小程序条件渲染与列表渲染的全面教程 引言 在微信小程序的开发中,条件渲染和列表渲染是构建动态用户界面的重要技术。通过条件渲染,我们可以根据不同的状态展示不同的内容,而列表渲染则使得我们能够高效地展示一组数据。本文将详细讲解这两种渲染方式的用法,结合实例…...

MySQL--存储引擎

目录 1 MySQL体系结构 2 存储引擎简介 3 存储引擎特点 3.1 InnoDB 3.1.1 介绍 3.1.2 特点 3.1.3 文件 3.2 逻辑存储结构 3.3 MyISAM 3.3.1 介绍 3.3.2 特点 3.3.3 文件 3.4 Memory 3.3.1 介绍 3.3.2 特点 3.3.3 文件 4 存储引擎选择 Innodb MyISAM MEMORY …...

洛谷 B2038:奇偶 ASCII 值判断

【题目来源】https://www.luogu.com.cn/problem/B2038http://shnoip.openjudge.cn/level1/39/【题目描述】 任意输入一个字符&#xff0c;判断其 ASCII 是否是奇数&#xff0c;若是&#xff0c;输出 YES&#xff0c;否则&#xff0c;输出 NO。 例如&#xff0c;字符 A 的 ASCII…...

软件测试面试之常规问题

1.描述一下测试过程 类似题目:测试的生命周期 思路:这是一个“范围”很大的题目&#xff0c;而且回答时间一般在3分钟之内&#xff0c;不可能非常详细的描述整个过程&#xff0c;因此答题的思路要从整体结构入手&#xff0c;不要过细。为了保证答案的准确性&#xff0c;可以引…...

Android 天气APP(三十七)新版AS编译、更新镜像源、仓库源、修复部分BUG

上一篇&#xff1a;Android 天气APP&#xff08;三十六&#xff09;运行到本地AS、更新项目版本依赖、去掉ButterKnife 新版AS编译、更新镜像源、仓库源、修复部分BUG 前言正文一、更新镜像源① 腾讯源③ 阿里源 二、更新仓库源三、修复城市重名BUG四、地图加载问题五、源码 前…...

网络性能及IO性能测试工具

文章目录 简介IO性能pidstatiostatfioblktrace 网络性能ipeftrek 简介 网络性能和IO性能测试工具在现代计算环境中至关重要。无论是评估网络带宽、优化数据传输速度&#xff0c;还是检测磁盘读写性能&#xff0c;选择适合的工具至关重要。本文将介绍各种网络性能和IO性能测试工…...

1+X应急响应(网络)常见网络攻击-SQL注入:

常见网络攻击-SQL注入&#xff1a; SQL注入概述&#xff1a; 动态网站的工作流程&#xff1a; SQL注入的起源&#xff1a; SQL典型的攻击手段&#xff1a; SQL注入的危害&#xff1a; SQL注入的函数&#xff1a; SQL注入类型&#xff1a; 提交方式分类&#xff1a; Get注入&am…...

流式上传与分片上传的原理与实现

&#x1f680; 博主介绍&#xff1a;大家好&#xff0c;我是无休居士&#xff01;一枚任职于一线Top3互联网大厂的Java开发工程师&#xff01; &#x1f680; &#x1f31f; 在这里&#xff0c;你将找到通往Java技术大门的钥匙。作为一个爱敲代码技术人&#xff0c;我不仅热衷…...

基于深度学习CNN算法的花卉分类识别系统01--带数据集-pyqt5UI界面-全套源码

文章目录 基于深度学习算法的花卉分类识别系统一、项目摘要二、项目运行效果三、项目文件介绍四、项目环境配置1、项目环境库2、环境配置视频教程 五、项目系统架构六、项目构建流程1、数据集2、算法网络Mobilenet3、网络模型训练4、训练好的模型预测5、UI界面设计-pyqt56、项目…...

【数电】常见组合逻辑电路设计和分析

1.基于数据选择器设计 1.1卡诺图降维 1.2实例分析 1.2.1例题一 1.2.2例题二 1.2.2例题三 2.基于译码器设计 3.参考资料 1.《数字电子技术基础 第六版》 阎石王红 2.卡诺图的降维_哔哩哔哩_bilibili...

攻防世界-web ics-06 [解法思路]

进入环境 点击左边的列表只有报表中心有反应 注意看url直接就是index.php?id1 我先试了sqlmap不行&#xff0c;然后就沉淀了一下 想到了id后面的参数问题&#xff0c;我谁便改了几个数都没反应 就想着用bp抓包爆一下这个参数&#xff0c;用了一个数字10000的字典 发现2333…...

传智杯 3-初赛:终端

题目描述&#xff1a; 有一天您厌烦了电脑上又丑又没用的终端&#xff0c;打算自己实现一个 Terminal。具体来说&#xff0c;它需要支持如下命令: 1. touch filename&#xff1a;如果名为 filename 的文件不存在&#xff0c;就创建一个这样的文件&#xff0c;如果已经存在同名…...

《数据结构》学习系列——图(中)

系列文章目录 目录 图的遍历深度优先遍历递归算法堆栈算法 广度优先搜索 拓扑排序定义定理算法思想伪代码 关键路径基本概念关键活动有关量数学公式伪代码时间复杂性 图的遍历 从给定连通图的某一顶点出发&#xff0c;沿着一些边访问遍图中所有的顶点&#xff0c;且使每个顶点…...

网络安全,文明上网(2)加强网络安全意识

前言 在当今这个数据驱动的时代&#xff0c;对网络安全保持高度警觉已经成为每个人的基本要求。 网络安全意识&#xff1a;信息时代的必备防御 网络已经成为我们生活中不可或缺的一部分&#xff0c;信息技术的快速进步使得我们对网络的依赖性日益增强。然而&#xff0c;网络安全…...

Laravel对接SLS日志服务

Laravel对接SLS日志服务&#xff08;写入和读取&#xff09; 1、下载阿里云的sdk #通过composer下载 composer require alibabacloud/aliyun-log-php-sdk#对应的git仓库 https://github.com/aliyun/aliyun-log-php-sdk2、创建sdk请求的service <?phpnamespace App\Ser…...

Kafka 工作流程解析:从 Broker 工作原理、节点的服役、退役、副本的生成到数据存储与读写优化

Kafka&#xff1a;分布式消息系统的核心原理与安装部署-CSDN博客 自定义 Kafka 脚本 kf-use.sh 的解析与功能与应用示例-CSDN博客 Kafka 生产者全面解析&#xff1a;从基础原理到高级实践-CSDN博客 Kafka 生产者优化与数据处理经验-CSDN博客 Kafka 工作流程解析&#xff1a…...