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

重生之我在异世界学编程之C语言:二维数组篇

大家好,这里是小编的博客频道
小编的博客:就爱学编程

很高兴在CSDN这个大家庭与大家相识,希望能在这里与大家共同进步,共同收获更好的自己!!!

本文目录

  • 引言
  • 正文
    • 一 二维数组的创建
      • 1. 二维数组的概念
      • 2. 二维数组的创建
    • 二 二维数组的初始化
      • 1. 不完全初始化
      • 2. 完全初始化
      • 3. 按照行初始化
    • 三 二维数组的使用
      • 1.二维数组的下标
      • 2.使用场景
    • 四 二维数组在内存中的存储
      • 1.存储结构
      • 2.内存布局
      • 3.访问方式
      • 4.地址计算
  • 快乐的时光总是短暂,咱们下篇博文再见啦!!!不要忘了,给小编点点赞和收藏支持一下,在此非常感谢!!!

引言

在C语言中,数组是一种非常重要的数据结构,它允许我们存储固定大小的同类型元素集合。通过使用数组,我们可以方便地处理大量数据,提高程序的效率和可读性。数组的类型分为一位数组和二维数组,还有多维数组,而今天小编将要给大家介绍的是二维数组的相关知识。一起来看看吧!!!

在这里插入图片描述


那接下来就让我们开始遨游在知识的海洋!

正文


首先,我们来看看二维数组的创建

一 二维数组的创建


知其然才能知其所以然,所以我们先来看看二维数组的概念

1. 二维数组的概念

基本概念:C语言的二维数组是一种用于存储具有行和列两个维度的数据集合的结构,类似于数学中的矩阵。在定义时,需要指定数组的行数和列数以及数据类型,例如int array[3][4];表示一个包含3行4列的整型二维数组。每个元素都可以通过其唯一的行索引列索引来访问和操作,非常适合处理表格形式的数据。

相信看过小编上篇关于一维数组的介绍的宝子们对索引一词并不会感到陌生,但这里的行索引列索引又是什么,难道是说明二维数组有两个不同功能的下标?带着这个疑惑,接着往下看。


知道这个二维数组的概念后,我们再来学习二维数组的创建

2. 二维数组的创建

由上易知格式为: 数据类型 数组名[行数][列数]

  • 行索引就是用来访问二维数组的行数,列索引就是用来访问二维数组的列数。具体怎么访问?我们之后再讨论。

以下为例:

int arr[2][3];
double arr1[3][4];

这样我们就创建了两个二维数组。

而事实上,二维数组在创建时是可以省略行数的,但一定不能省略列数。为什么?

其实你仔细思考就可以想到:

省略行数我们可以通过列数推到这个二维数组的行数,但是省略列数我们就得不到二维数组的列数了,没有列数的二维数组又怎么算做一个二维数组?

  • 所以我们在创建一个二维数组时不可省略列数,可以省略行数

所以以下的二维数组的创建正确的

1   int  arr [][5] = { 1, 2, 3 };2   int  arr [][6] = { 1, 2, 3, 4, 5, 6, 7, 8 };3   int  arr [][7] = { {1, 2}, {3, 4}, {5, 6} };

而以下的二维数组的创建错误的

1   int  arr [5][] = { 1, 2, 3 };2   int  arr [6][] = { 1, 2, 3, 4, 5, 6, 7, 8 };3   int  arr [7][] = { {1, 2}, {3, 4}, {5, 6} };
  • 好好利用这个知识点,可以在我们不知道我们将会创建多少个元素的二维数组但是知道列数时最大的节约内存空间但也可能造成语法错误。所以一定要牢记:二维数组在创建时是可以省略行数的,**但一定不能省略列数**。

和一维数组一样,学完了二维数组的创建,我们来学二维数组的初始化

二 二维数组的初始化

初始化定义:在创建变量或数组的时候,给定一些初始值,被称为 初始化。二维数组的初始化与一维数组一样,也是用大括号初始化的。


同样地,二维数组的初始化也分为不完全初始化完全初始化,我们先来看看不完全初始化是怎样的。

1. 不完全初始化

顾名思义,不完全初始化就是数组元素并不全部进行赋值的赋值方式

以下为例:

#include<stdio.h>
int main(){int arr[2][3] = { 1, 2, 3, 4, 5 };return 0;
}

由上可知:

  • 该二维数组的行数列数分别为:【2】和【3】,所以我们不难得出该数组的数组元素的总数为6,而我们可以看到小编这里只对5个元素进行了赋值,是哪5个呢?

我们用监视窗口看一下:

在这里插入图片描述

由图可知:

  • arr[0][0],arr[0][1],arr[0][2],arr[1][0],arr[1][1]被分别初始化为1,2,3,4,5,只有 arr[1][2]没被赋值。所以我们不难看出:二维数组的初始化也是随着下标从小到大进行赋值的,只不过这里的下标行下标列下标,也就是行索引列索引。并且似乎行索引对赋值顺序的决定作用更大。这里就先不深入讨论,后文会细讲。

看完了二维数组的部分初始化,我们再来学习二维数组的完全初始化

2. 完全初始化

说白了,就是对二维数组的全部元素进行了赋值

以下为例:

#include<stdio.h>
int main(){int arr[2][3] = { 1, 2, 3, 4, 5, 6};return 0;
}

这里同样用监视窗口看一下数组元素有没有被我们放进去初值:

在这里插入图片描述

不出所料,相信这对于聪明的宝子们还是很简单的。那就再接着往下看。


接下来的就是一维数组不具备的独特初始化方式按照行初始化。那一起来看看吧!

3. 按照行初始化

其实,借助这个方法的名字——按照行初始化,我们不难想到这个初始化的方式是不是一行一行地赋初值?

是的,You are so good! ! ! 那该怎么达到我们想要的赋值效果呢?
这就要使用{}这个东东了。

以下为例:

#include<stdio.h>
int main(){int arr[2][3] = { {1}, {2, 3}};return 0;
}

如果没有使用{},此次的赋值结果由上可知应为arr[0][0] = 1,arr[0][1] = 2,arr[0][2] = 3,arr[1][0] = 0,arr[1][1] = 0,arr[1][2] = 0;

而使用了{}的实际结果如图:
在这里插入图片描述

显然,这里的效果就是我们猜想的结果。

  • 按行初始化可以使得我们给二维数组初始化时更加灵活

在学完了二维数组的创建及初始化后,我们步入了二维数组的使用的学习。

三 二维数组的使用


当然,学习二维数组的使用毫无疑问从二维数组的下标开始学起。

1.二维数组的下标

在C语言中,二维数组可以被看作是一个表格(或矩阵),其中每个元素都有一个行号和列号。这些行号和列号就是所谓的下标,也就是行索引列索引的别称。而二维数组的下标也都是从零开始

假设我们有一个二维数组 arr[m][n],则:

  • m 表示数组的行数。
  • n 表示数组的列数。

那么,数组中的某个元素可以通过 arr[i][j] 来访问,其中:

  • i 是元素的行下标,取值范围是 0 到 m-1
  • j 是元素的列下标,取值范围是 0 到 n-1

例如,对于以下二维数组:

int arr[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};

要访问第二行第三列的元素(即数字7),可以使用 arr[1][2]

2.使用场景

基本使用场景:1. 表示矩阵: 二维数组非常适合用来表示数学上的矩阵。矩阵的运算(如加法、乘法)可以很方便地通过遍历和操作二维数组来实现。2. 图像处理:在图像处理中,图像通常被表示为像素点的集合。一个二维数组可以用来存储图像的灰度值或颜色信息(对于灰度图像,每个元素可以是亮度值;对于彩色图像,可能需要三个二维数组分别存储红、绿、蓝通道的值)。3. 动态规划问题:许多动态规划问题可以用二维数组来记录中间结果。例如,求解最长公共子序列(LCS)、最短路径等问题时,通常会使用一个二维数组来保存已经计算过的状态。4. 网格和地图:在游戏开发和其他应用中,二维数组可以用来表示游戏世界中的网格或地图。每个元素可以代表网格中的一个单元格,包含该单元格的信息(如是否可通行、是否有障碍物等)。5. 其他需要二维数据结构的场景: 除了上述场景外,还有许多其他问题也可以利用二维数组来解决。例如,统计数据的表格、棋盘游戏的状态表示等。

哈哈!宝子们是不是被吓了一跳,小编在刚看到时也被吓了一跳。是不是觉得有很多没听过的专业名词?没关系,小编在之后的日子里会带着大家把这些“拦路虎”一一征服!!!相信小编,也请相信自己!!!

在目前,我们需要掌握的就是二维数组的遍历

如何遍历?这里小编就以最简单的例子按行打印二维数组为例抛砖引玉

#include<stdio.h>
int main(){int arr[2][3] = {1, 2, 3, 4, 5, 6};int i = 0;int j = 0;for (i; i < 2; i++) {for (j; j < 3; j++) {printf("%d ", arr[i][j]);}printf("\n");}return 0;
}

虽然例子简单,但小编想让大家感受到的是:

  • 一般我们在遍历二维数组时,都会使用两个整型变量ij并初始化为0。至于为什么初始化为0,这也是因为C语言的数组的下标从0开始
  • 且一般会使用两个循环,以for循环最为常见进行遍历

由于现在我们还处于初识二维数组的阶段,所以对二维数组的使用暂讲到这,大家理解完本文可以多去一些刷题网站 加深理解哦!


那现在就让我们进入本文的最后一章节—— 二维数组在内存中的存储

四 二维数组在内存中的存储


这里小编就先从二维数组在内存中的存储结构开始讲起哈。

1.存储结构

从本质上看,二维数组可以被视为“数组的数组”。也就是说,它是一个一维数组的集合,其中每个元素本身又是一个一维数组。例如,int array[3][4]; 表示一个包含3个元素的二维数组,而每个元素都是一个包含4个整数的一维数组。

所以我们引申得到:arr[0]是第一行数组元素的数组名。这很重要,在我们后面理解一维数组和二维数组的数组名有大用。


接着是内存布局

2.内存布局

在内存中,二维数组是连续存储的。具体来说,二维数组的所有元素都按照行优先的顺序排列。这意味着,首先存储第一行的所有元素,紧接着是第二行的所有元素,以此类推,直到最后一行。这种存储方式使得我们可以通过简单的指针运算来访问数组中的任何元素。

这里小编也可以通过打印出一个二维数组的元素的所有地址验证上述说法:

#include<stdio.h>
int main(){int arr[2][3] = {1, 2, 3, 4, 5, 6};int i = 0;int j = 0;for (i; i < 2; i++) {for (j; j < 3; j++) {printf("%p\n", &arr[i][j]);}printf("\n");}return 0;
}

运行结果为:

在这里插入图片描述

注:

  • 在64位机器(现在的大部分计算机)中地址的大小是8个字节;
  • '%p’占位符打印的是十六进制表示下的地址;
  • 两个十六进制位数字就占用一个字节

所以我们不难发现:整形数组的相邻数组元素首字节地址大小相差4个字节,也就是一个整型数据的大小。

所以我们可以得出:

  • 二维数组的元素在内存中的存储是连续的,也就是紧挨着的。这和一维数组是一样的

再接着来看看二维数组的访问方式

3.访问方式

由于二维数组在内存中是连续存储的,因此我们可以使用双重循环(嵌套循环)来遍历整个数组。外层循环用于迭代行,内层循环用于迭代列。通过指定行索引和列索引,我们可以轻松地访问或修改数组中的特定元素。

例:

#include<stdio.h>
int main(){int arr[2][3] = {1, 2, 3, 4, 5, 6};int i = 0;int j = 0;arr[1][2] = 7;for (i = 0; i < 2; i++) {for (j = 0; j < 3; j++) {printf("%d ", arr[i][j]);}printf("\n");}return 0;
}

运行结果为:
在这里插入图片描述

我们这就通过二维数组的下标(索引)访问并修改了特定的元素的值。


最后我们来看看二维数组的地址计算

4.地址计算

在C语言中,数组名表示的是数组首元素的地址。对于二维数组来说,这个首元素实际上是一个指向其第一行第一个元素的一维数组的指针。因此,如果我们知道数组的首地址以及目标元素的行索引和列索引,就可以计算出该元素的内存地址。这通常涉及到一些基本的算术运算,如乘法(用于跳过前面的行或元素)和加法(用于定位到具体的元素)。

假设这有一个二维数组arr[2][3];,如果我们知道了首元素arr[0][0]的地址,那其他的元素的地址就可以很好的算出。不妨假设&arr[0][0] = 0000000000000000,则&arr[1][2] = 0000000000000018

为什么?这就需要宝子们自己思考啦!!!理解这题就掌握了这节知识——二维数组的内存布局和地址计算

  • 总的来说,C语言的二维数组在内存中是以连续的方式存储的,这使得它们非常适合于需要快速访问和修改大量数据的场景。

快乐的时光总是短暂,咱们下篇博文再见啦!!!不要忘了,给小编点点赞和收藏支持一下,在此非常感谢!!!

相关文章:

重生之我在异世界学编程之C语言:二维数组篇

大家好&#xff0c;这里是小编的博客频道 小编的博客&#xff1a;就爱学编程 很高兴在CSDN这个大家庭与大家相识&#xff0c;希望能在这里与大家共同进步&#xff0c;共同收获更好的自己&#xff01;&#xff01;&#xff01; 本文目录 引言正文一 二维数组的创建1. 二维数组的…...

linux——进程间通信及管道的应用场景

linux进程的控制-CSDN博客 liunx——进程间通信&#xff08;管道通信&#xff09;-CSDN博客 文章目录 文章目录 前言 二、管道的应用 1.创建子进程 1、描述&#xff1a; 2.创建进程及管理 3、子进程接受任务 4、控制子进程 总结 前言 上篇博客我们学习了进程间通信&…...

深度学习基础3

目录 1.过拟合与欠拟合 1.1 过拟合 1.2 欠拟合 1.2 解决欠拟合 1.2.1 L2正则化 1.2.2 L1正则化 1.2.3 Dropout 1.2.4 简化模型 1.2.5 数据增强 1.2.6 早停 1.2.7 模型集成 1.2.8 交叉验证 2.批量标准化 2.1 实现过程 2.1.1 计算均值和方差 2.1.2 标准化 2.1.3…...

靶机dpwwn-01

靶机下载地址&#xff1a;https://download.vulnhub.com/dpwwn/dpwwn-01.zip 信息收集 扫描靶机的IP地址 arp-scan -l 获得靶机的IP地址&#xff1a;192.168.200.130 查看靶机的服务类型&#xff0c;端口信息 nmap -sS -sV -T4 -A -p- 192.168.200.130 开启了22&#xf…...

Python毕业设计选题:基于django+vue的智慧社区可视化平台的设计与实现+spider

开发语言&#xff1a;Python框架&#xff1a;djangoPython版本&#xff1a;python3.7.7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat11开发软件&#xff1a;PyCharm 系统展示 管理员登录 管理员功能界面 养老机构管理 业主管理 社区安防管理 社区设施管理 车位…...

大语言模型微调与 XTuner 微调实战

1 大语言模型微调 1.1 什么是微调 大语言模型微调&#xff08;Fine-tuning of Large Language Models&#xff09;是指在预训练的大型语言模型基础上&#xff0c;使用特定任务的数据进一步训练模型&#xff0c;以使其更好地适应和执行特定任务的过程&#xff0c;用于使LLM&am…...

数据结构-查找(四)总结与对比

查找算法总结 文章目录 查找算法总结一、查找的基本概念二、顺序查找法适用场景 三、分块查找法适用场景 四、折半查找法&#xff08;Binary Search&#xff09;适用场景 五、树型查找1. 二叉搜索树&#xff08;BST&#xff09;2. 平衡二叉树&#xff08;AVL&#xff09;3. 红黑…...

c++总复习

一、什么是 C 中的函数对象&#xff1f;它有什么特点&#xff1f; 在 C 中&#xff0c;函数对象&#xff08;Function Object&#xff09;也称为仿函数&#xff08;Functor&#xff09;&#xff0c;它是一个类的实例&#xff0c;该类重载了函数调用运算符()&#xff0c;使得这个…...

AJAX一、axios使用,url组成(协议,域名,资源路径)查询参数和化简,错误处理,请求/响应报文,状态码,接口文档,

一、AJAX是什么 概念 &#xff1a; AJAX是一种与服务器&#xff08;后端&#xff09;通信的技术 二、请求库axios的基本用法 1导包 2使用 // 1. 发请求 axios({ url: 请求地址 }).then(res > { // 2.接收并使用数据 }) <body><p class"province"…...

Python学习笔记

MJ大神的Python课&#xff0c;课堂笔记 int 和float运算结果是 float除法&#xff08;/&#xff09;的结果是float整除&#xff08;//&#xff09;&#xff0c;向下取整(floor)int 和 int 进行整除&#xff08;//&#xff09;,得到的结果是int 绘制一个填充色边框色 import …...

开源 - Ideal库 - Excel帮助类,TableHelper实现(三)

书接上回&#xff0c;我们今天继续讲解实现对象集合与DataTable的相互转换。 01、把表格转换为对象集合 该方法是将表格的列名称作为类的属性名&#xff0c;将表格的行数据转为类的对象。从而实现表格转换为对象集合。同时我们约定如果类的属性设置了DescriptionAttribute特性…...

ceph手动部署

ceph手动部署 一、 节点规划 主机名IP地址角色ceph01.example.com172.18.0.10/24mon、mgr、osd、mds、rgwceph02.example.com172.18.0.20/24mon、mgr、osd、mds、rgwceph03.example.com172.18.0.30/24mon、mgr、osd、mds、rgw 操作系统版本&#xff1a; Rocky Linux release …...

macOS 开发环境配置与应用开发指南

macOS 开发环境配置与应用开发指南 macOS作为苹果公司推出的操作系统&#xff0c;因其稳定性、优雅的用户界面和强大的开发支持&#xff0c;已成为开发者和创意专业人士的首选平台之一。无论是开发iOS、macOS桌面应用&#xff0c;还是Web应用、跨平台程序&#xff0c;macOS都提…...

自动化是语法,智能化是语义与语用

自动化与智能化可以从语言学的角度来进行类比和探讨。 1. 自动化是语法 自动化可以类比为“语法”的部分&#xff0c;因为它关注的是操作过程的规则、结构和执行方式。语法是语言中关于词汇、句子结构和规则的系统&#xff0c;它提供了语言运作的框架和规范。类似地&#xff0c…...

基于DHCP,ACL的通信

该问题为华为的学习资料 1.首先把所有的PC机全部设置为DHCP 2.配置地址 3.ospf 4.dhcp 5.acl AR1 dhcp en interface GigabitEthernet0/0/0ip address 192.168.1.254 255.255.255.0 dhcp select global interface GigabitEthernet0/0/1ip address 10.1.12.1 255.255.255.…...

Unity跨平台基本原理

Unity跨平台基本原理 Unity跨平台基本原理微软的.Net是什么微软做 .Net平台的目的如何实现的.Net跨语言&#xff1f;总结 .Net Framework.Net Framework的体系结构CLR总结 如何实现的跨平台&#xff1f;.Net Core.Net FrameWork 到 .Net CoreMonoMono如何实现跨平台总结如何实现…...

基于 Python、OpenCV 和 PyQt5 的人脸识别上课打卡系统

大家好&#xff0c;我是Java徐师兄&#xff0c;今天为大家带来的是基于 Python、OpenCV 和 PyQt5 的人脸识别上课签到系统。该系统采用 Python 语言开发&#xff0c;开发过程中采用了OpenCV框架&#xff0c;Sqlite db 作为数据库&#xff0c;系统功能完善 &#xff0c;实用性强…...

IDEA的简易安装思路

IDEA(本身就是Java开发的)&#xff1a;是目前为止开发Java效率最高的工具&#xff0c;但正版收费……&#xff08;eclipse的话不好说&#xff0c;反正还是随主流吧&#xff09; 使用IDEA的前提&#xff1a;必须先安装JDK【否则直接使用IDEA工具来运行程序是无效的&#xff0c;它…...

【实战】在Koa.js中实现文件上传的接口 (本地存储)

目录 环境准备 使用 koa-body 中间件获取上传的文件 使用 Postman 测试 使用 koa-static 中间件生成图片链接 编写前端页面上传文件 文件上传是一个基本的功能&#xff0c;每个系统几乎都会有&#xff0c;比如上传图片、上传Excel等。那么在Node Koa应用中如何实现一个支持…...

flink学习(10)——allowedLateness/测道输出

allowedLateness(lateness: Time) 水印&#xff1a;短期延迟&#xff0c;达到条件后触发计算并且关闭窗口&#xff08;触发关闭同时进行&#xff09; 水印allowedLateness : 短期延迟 等待长期延迟效果 1、达到水印条件后&#xff0c;会触发窗口计算&#xff0c;但是不关闭窗口…...

微信小程序按字母顺序渲染城市 功能实现详细讲解

在微信小程序功能搭建中&#xff0c;按字母渲染城市会用到多个ES6的方法&#xff0c;如reduce&#xff0c;map&#xff0c;Object.entries()&#xff0c;Object.keys() &#xff0c;需要组合熟练掌握&#xff0c;才能优雅的处理数据完成渲染。 目录 一、数据分析 二、数据处理 …...

openjdk17 jvm 对象 内存溢出 在C++源码体现

##java大对象类 public class MiBigObject {private String f1;private String f2;private String f3;private String f4;private String f5;private String f6;private String f7;private String f8;private String f9;private String f10;private String f11;private String…...

【软考速通笔记】系统架构设计师⑧——系统质量属性与架构评估

文章目录 一、前言二、软件系统质量属性2.1 开发期质量属性2.2 运行期质量属性 三、质量属性场景描述四、系统架构评估方法4.1 方法分类4.2 软件架构分析方法4.3 架构权衡分析法4.4 成本效益分析法 一、前言 笔记目录大纲请查阅&#xff1a;【软考速通笔记】系统架构设计师——…...

YOLO系列论文综述(从YOLOv1到YOLOv11)【第5篇:YOLOv3——多尺度预测】

YOLOv3 1 摘要2 YOLOv32.1 相对于v2的改进2.2 网络架构2.3 多尺度预测2.4 YOLOv3结果 YOLO系列博文&#xff1a; 【第1篇&#xff1a;概述物体检测算法发展史、YOLO应用领域、评价指标和NMS】【第2篇&#xff1a;YOLO系列论文、代码和主要优缺点汇总】【第3篇&#xff1a;YOLOv…...

HarmonyOS4+NEXT星河版入门与项目实战(25)------UIAbility启动模式(文档编辑案例)

文章目录 1、启动模式2、Specified启动模式实现步骤3、文档编辑案例1、文件创建2代码实现3、Statge 创建4、添加配置1、启动模式 Singleton启动模式: 每个 UIAbility 只存在一个实例,是默认的启动模式,任务列表中只会存在一个相同的 UIAbilityStandard启动模式: 每次启动 U…...

PyTorch张量运算与自动微分

PyTorch张量运算与自动微分 PyTorch由Facebook人工智能研究院于2017年推出&#xff0c;具有强大的GPU加速张量计算功能&#xff0c;并且能够自动进行微分计算&#xff0c;从而可以使用基于梯度的方法对模型参数进行优化&#xff0c;大部分研究人员、公司机构、数据比赛都使用P…...

在 Ubuntu 20.04 上使用 Lux 下载 Bilibili 视频的详细教程

在 Ubuntu 20.04 上使用 Lux 下载 Bilibili 视频的详细教程 在 Ubuntu 20.04 上使用 Lux 下载 Bilibili&#xff08;哔哩哔哩&#xff09;视频的完整和详细步骤如下&#xff0c;包括使用预编译二进制文件的安装方法&#xff1a; 1. 安装依赖 确保你的系统已安装 FFmpeg&…...

1.1 数据结构的基本概念

1.1.1 基本概念和术语 一、数据、数据对象、数据元素和数据项的概念和关系 数据&#xff1a;是客观事物的符号表示&#xff0c;是所有能输入到计算机中并被计算机程序处理的符号的总称。 数据是计算机程序加工的原料。 数据对象&#xff1a;是具有相同性质的数据元素的集合&…...

【NebulaGraph】深入了解查询语句(二)

【NebulaGraph】深入了解查询语句 1. NebulaGraph 查询语句概述 1. NebulaGraph 查询语句概述 文档&#xff1a;https://docs.nebula-graph.com.cn/3.8.0/3.ngql-guide/7.general-query-statements/1.general-query-statements-overview/ NebulaGraph 的数据以点和边的形式存…...

Oracle—系统包使用

文章目录 系统包dbms_redefinition 系统包 dbms_redefinition 功能介绍&#xff1a;该包体可以实现将Oracle库下的表在线改为分区结构或者重新定义&#xff1b; 说明&#xff1a;在检查表是否可以重定义和开始重定义的过程中&#xff0c;按照表是否存在主键&#xff0c;参数 o…...

org.apache.commons.lang3包下的StringUtils工具类的使用

前言 相信平时在写项目的时候&#xff0c;一定使用到StringUtils.isEmpty()&#xff1b;StringUtils.isBlank();但是你真的了解他们吗&#xff1f; 也许你两个都不知道&#xff0c;也许你除了isEmpty/isNotEmpty/isNotBlank/isBlank外&#xff0c;并不知道还有isAnyEmpty/isNon…...

详细介绍Node.js的中间件及使用方法

在Node.js的生态中&#xff0c;中间件&#xff08;Middleware&#xff09;是一个不可或缺的概念&#xff0c;它为构建灵活而高效的应用程序提供了强大的支持。以下是对Node.js中间件的详细介绍&#xff1a; 中间件的概念与定义 中间件是一种软件架构的设计模式&#xff0c;用…...

VPC9527同步整流控制器,相对最大电压检测与强力自供电,与MP6908完全PIN TO PIN

VPC9527 是一款高性能的同步整流控制器,它兼容 CCM 和 DCM 两种模式,最大工作频率高达 700kHz;可 通过 SEL 引脚的逻辑电压来选择 400nS 或 800nS 两个关断检测的屏蔽时间;可通过 VLC 引脚来调整限压导通的 参数,以便与所选同步整流管的参数相匹配,获得适应的最优性能;它…...

【聚类】主成分分析 和 t-SNE 降维

1 主成分分析PCA PCA 是一种线性降维技术&#xff0c;旨在通过选择具有最大方差的特征方向&#xff08;称为主成分&#xff09;来压缩数据&#xff0c;同时尽可能减少信息损失。 1.1 原理 1.2 优缺点 from sklearn.decomposition import PCA import matplotlib.pyplot as plt…...

MyBatis框架-日志配置

MyBatis框架的日志配置 MyBatis作为一个封装好的ORM框架&#xff0c;其运行过程我们没有办法跟踪&#xff0c;为了让开发者MyBatis执行流程及执行步骤所完成的工作&#xff0c;MyBatis框架本身支持log4j日志框架&#xff0c;对运行的过程进行跟踪记录。我们只需对MyBatis进行相…...

【数据结构】哈希 ---万字详解

unordered系列关联式容器 在C98中&#xff0c;STL提供了底层为红黑树结构的一系列关联式容器&#xff0c;在查询时效率可达到log_2 N&#xff0c;即最差情况下需要比较红黑树的高度次&#xff0c;当树中的节点非常多时&#xff0c;查询效率也不理想。最好 的查询是&#xff0c…...

Python Web 框架

Python 有多个强大的 Web 框架&#xff0c;每个框架都具有不同的特点和应用场景。根据开发者的需求&#xff08;如开发速度、灵活性、功能等&#xff09;&#xff0c;可以选择适合的框架。以下是一些常见的 Python Web 框架&#xff1a; 1. Django 简介&#xff1a;Django 是一…...

大模型翻译能力评测

1. 背景介绍 随着自然语言处理技术的飞速发展&#xff0c;机器翻译已经成为一个重要的研究领域。近年来&#xff0c;基于大模型的语言模型在机器翻译任务上取得了显著的进展。这些大模型通常具有数亿甚至数千亿的参数&#xff0c;能够更好地理解和生成自然语言。 但是&#xf…...

深度学习中的前向传播与损失函数

目录 ​编辑 前向传播&#xff1a;神经网络的推理过程 什么是前向传播&#xff1f; 前向传播的步骤 数学表达 代码示例&#xff1a;前向传播 损失函数&#xff1a;衡量预测与真实值的差异 损失函数的定义 损失函数的作用 常见的损失函数 代码示例&#xff1a;损失函…...

MySQL 复合查询

实际开发中往往数据来自不同的表&#xff0c;所以需要多表查询。本节我们用一个简单的公司管理系统&#xff0c;有三张表EMP,DEPT,SALGRADE 来演示如何进行多表查询。表结构的代码以及插入的数据如下&#xff1a; DROP database IF EXISTS scott; CREATE database IF NOT EXIST…...

Java程序调kubernetes(k8s1.30.7)core API简单示例,并解决403权限验证问题,即何进行进行权限授权以及验证

简单记录问题 一、问题描述 希望通过Java程序使用Kubernetes提供的工具包实现对Kubernetes集群core API的调用&#xff0c;但是在高版本上遇见权限验证问题4xx。 <dependency><groupId>io.kubernetes</groupId><artifactId>client-java</artifact…...

Java安全—原生反序列化重写方法链条分析触发类

前言 在Java安全中反序列化是一个非常重要点&#xff0c;有原生态的反序列化&#xff0c;还有一些特定漏洞情况下的。今天主要讲一下原生态的反序列化&#xff0c;这部分内容对于没Java基础的来说可能有点难&#xff0c;包括我。 序列化与反序列化 序列化&#xff1a;将内存…...

火鸟地方门户系统V8.5系统源码+搭建环境教程

一.介绍 火鸟地方门户系统V8.5源码 系统包含4端&#xff1a; PCH5小程序APP 二.搭建环境 系统环境&#xff1a;CentOS、 运行环境&#xff1a;宝塔 Linux 网站环境&#xff1a;Nginx 1.2.22 MySQL 5.6 PHP-7.4 常见插件&#xff1a;fileinfo &#xff1b; redis 三.测…...

深度学习:梯度下降法

损失函数 L&#xff1a;衡量单一训练样例的效果。 成本函数 J&#xff1a;用于衡量 w 和 b 的效果。 如何使用梯度下降法来训练或学习训练集上的参数w和b &#xff1f; 成本函数J是参数w和b的函数&#xff0c;它被定义为平均值&#xff1b; 损失函数L可以衡量你的算法效果&a…...

Git常用命令

Git是一个优秀的代码版本管理工具&#xff0c;其常用命令包括但不限于以下这些&#xff1a; 一、初始化与配置 git init&#xff1a;在当前目录初始化一个新的Git仓库。git clone [url]&#xff1a;克隆远程仓库到本地。git config&#xff1a;配置Git的各种选项和变量&#…...

css预处理器scss/sass

一、css预处理器sass的诞生 众所周知css并不能算是一们真正意义上的“编程”语言&#xff0c;它本身无法未完成像其它编程语言一样的嵌套、继承、设置变量等工作&#xff0c;仅仅只能用来编写网站样式&#xff0c;如此一来代码就会百年的臃肿难以维护。为了解决css的不足&#…...

磁盘/系统空间占满导致黑屏死机无法开机的解决办法

文章目录 起因具体操作1.重启虚拟机&#xff0c;一直按CtrlShitf进入GRUP界面2.选“Ubuntu高级选项”并回车选择第二个&#xff0c;recovery mode![请添加图片描述](https://i-blog.csdnimg.cn/direct/201f9784c203406d802d24b39dc2d4a3.png)3.4.命令查看磁盘情况5.查找和删除文…...

API 与 SDK 之间的区别

API 与 SDK 之间的区别 很多人在软件开发中经常会分不清 SDK 与 API &#xff0c;今天就来浅谈一下两者之间的区别。 直白地说&#xff0c;SDK 包含了 API &#xff0c;是一套完整的&#xff0c;能完成更多功能的工具包&#xff0c;无论你想获取什么样的信息&#xff0c;SDK …...

Lua的环境与热更

一、global_State,lua_State与G表 Lua支持多线程环境&#xff0c;使用 lua_State 结构来表示一个独立的 Lua 线程&#xff08;或协程&#xff09;。每个线程都需要一个独立的全局环境。而lua_State 中的l_G指针&#xff0c;指向一个global_State结构&#xff0c;这个就是我们常…...

java八股-分布式服务的接口幂等性如何设计?

文章目录 接口幂等token Redis分布式锁 原文视频链接&#xff1a;讲解的流程特别清晰&#xff0c;易懂&#xff0c;收获巨大 【新版Java面试专题视频教程&#xff0c;java八股文面试全套真题深度详解&#xff08;含大厂高频面试真题&#xff09;】 https://www.bilibili.com/…...