【C语言】--指针超详解(三)
目录
一.数组名的理解
二.使用指针访问数组
三.一维数组传参的本质
四.冒泡排序
五.二级指针
六.指针数组
6.1--指针数组的定义
6.2--指针数组模拟二维数组
🔥个人主页:@草莓熊Lotso的个人主页
🎬作者简介:C++方向学习者
📖个人专栏:《C语言》
一.数组名的理解
--在前面的学习中,我们使用指针访问数组时一般会采用以下两种形式,它们所到达的效果也是相同的。
#include <stdio.h>
int main()
{int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };int* pa = &arr[0];int* pb = arr;printf("&arr[0] = %p\n", pa);printf("arr = %p\n", pb);return 0;
}
在上述代码中我们分别使用&arr[0]和arr的方式拿到了数组的第一个元素的地址,这是因为数组名本身就是地址,而且是数组首元素的地址。
但是有两个例外我们需要注意一下:
- sizeof(数组名),sizeof中单独放数组名,这⾥的数组名表示整个数组,计算的是整个数组的⼤小,单位是字节
- &数组名,这里的数组名表示整个数组,取出的是 整个数组的地址(整个数组的地址和数组首元素的地址是有区别的)
那么我们就通过两个例子具体分析一下吧~
例子1:
#include <stdio.h>
int main()
{int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };printf("%d\n", sizeof(arr));return 0;
}
如果arr是数组首元素的地址,那输出的应该是4/8 ,但这串代码的输出结果最后是40,这就证明的sizeof(数组名)计算的是整个数组的大小。
例子2:
#include <stdio.h>
int main()
{int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };printf("&arr[0] = %p\n", &arr[0]);printf("&arr[0]+1 = %p\n", &arr[0] + 1);printf("arr = %p\n", arr);printf("arr+1 = %p\n", arr + 1);printf("&arr = %p\n", &arr);printf("&arr+1 = %p\n", &arr + 1);return 0;
}
我们来分步解析一下这串代码:
- 我们可以发现光看&arr,arr,&arr[0]打印出来的地址并没有任何区别,这是因为数组的起始地址也是首元素的地址,所以我们接下来对它们分别+1 来找区别。
- +1之后我们会发现,&arr[0]和&arr[0]+1相差4个字节,arr和arr+1 相差4个字节,但是&arr 和 &arr+1相差40个字节。
- 这是因为&arr[0] 和 arr 都是⾸元素的地址,+1就是跳过⼀个元素,但是&arr是数组的地址,+1 操作是跳过整个数组的。
到这里想必大家都对数组名的意义有了正确的理解,我们接着往下看吧。
二.使用指针访问数组
--学习了前面的知识后,再结合数组的特点,我们就可以更方便的使用指针访问数组了。
#include <stdio.h>
int main()
{int arr[10] = { 0 };//输⼊int i = 0;int sz = sizeof(arr) / sizeof(arr[0]);//输⼊int* p = arr;for (i = 0; i < sz; i++){scanf("%d", p + i);//scanf("%d", arr+i);//也可以这样写}//输出for (i = 0; i < sz; i++){printf("%d ", *(p + i));//*(p+i)等价于*(arr+i)也可写成arr[i]}return 0;
}
通过上述代码我们可知,在这里arr和p是等价的,那我们可以使用arr[i]访问数组,是不是也可以使用p[i]呢?
答案是当然可以,其实本质上p[i]是等价于*(p+i)的,那么同理arr[i] 应该等价于 *(arr+i),数组元素的访问在编译器处理的时候,也是转换成⾸元素的地址+偏移量求出元素的地址,然后解引⽤来访问的,所以这几个使用那个都可以正确的打印出来结果。
还有一个比较有意思的等价关系给大家分享一下,但是不推荐使用:
arr[i] == *(arr+i) == *(i+arr) == i[arr]
大家可以发现,后面两个等价的很怪,但确实是可行的,其实就是用了交换律而已。
三.一维数组传参的本质
--数组我们学过了,之前也讲了,数组是可以传递给函数的,这个小节我们讨论⼀下数组传参的本质。
#include <stdio.h>
void test(int arr[])
{int sz2 = sizeof(arr) / sizeof(arr[0]);printf("sz2 = %d\n", sz2);
}
int main()
{int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };int sz1 = sizeof(arr) / sizeof(arr[0]);printf("sz1 = %d\n", sz1);test(arr);return 0;
}
我们通过上面这串代码的输出结果可以看出在函数内部没有正确获得数组的元素个数。这就涉及到数组传参的本质了。
void test(int arr[])//参数写成数组形式,本质上还是指针
{printf("%d\n", sizeof(arr));
}
void test(int* arr)//参数写成指针形式
{printf("%d\n", sizeof(arr));//计算⼀个指针变量的⼤⼩
}
int main()
{int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };test(arr);return 0;
}
总结:一维数组传参,形参的部分可以写成数组的形式,也可以写成指针的形式。
四.冒泡排序
--冒泡排序的核心思想:两两相邻的元素进行比较。
//方法一
#include<stdio.h>
#include<string.h>void bubble_sort(int arr[], int sz)
{int i = 0;//趟数=元素个数-1=sz-1;for (i = 0;i < sz - 1;i++){int j = 0;//每一趟要比较的次数=元素个数-当前趟数-1=sz-i-1;for (j = 0;j < sz - i - 1;j++){if (arr[j] > arr[j + 1]){int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}
}
void print_arr(int arr[], int sz)
{for (int i = 0;i < sz;i++){printf("%d ", arr[i]);}
}
int main()
{int arr[10] = { 0 };//如果是arr[],后面就无法自己输入数字,要注意int sz = sizeof(arr) / sizeof(arr[0]);printf("请输入待排序的数字: ");for (int n = 0;n < sz;n++){scanf("%d", arr + n);}bubble_sort(arr, sz);printf("排序完成后的数字是: ");print_arr(arr, sz);return 0;
}
//方法二--优化
#include<stdio.h>
#include<string.h>
void bubble_sort(int arr[], int sz)
{int i = 0;//趟数=元素个数-1=sz-1;for (i = 0;i < sz - 1;i++){int j = 0;int flag = 0;//假设这趟是有序的//每一趟要比较的次数=元素个数-当前趟数-1=sz-i-1;for (j = 0;j < sz - i - 1;j++){if (arr[j] > arr[j + 1]){int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;flag = 0;//只要这趟有一次发生交换的,则无序}}if (flag == 1);//这一趟一次交换都没发生就说明已经有序了,不用继续排序了break;}
}
void print_arr(int arr[], int sz)
{for (int i = 0;i < sz;i++){printf("%d ", arr[i]);}
}
int main()
{int arr[10] = { 0 };//如果是arr[],后面就无法自己输入数字,要注意int sz = sizeof(arr) / sizeof(arr[0]);printf("请输入待排序的数字: ");for (int n = 0;n < sz;n++){scanf("%d", arr + n);}bubble_sort(arr, sz);printf("排序完成后的数字是: ");print_arr(arr, sz);return 0;
}
优化后的方法可以减少比较的次数,大大减少了程序运行的时间。
五.二级指针
--指针变量也是变量,是变量就有地址,那指针变量的地址存放在哪里呢。
那就是存放在二级指针里。
对于二级指针的运算有:
- *ppa 通过对ppa中的地址进⾏解引⽤,这样找到的是 pa ,*ppa 其实访问的就是 pa 。
1 int b = 20;2 *ppa = &b;//等价于 pa = &b;
- **ppa 先通过 *ppa 找到 pa ,然后对 pa 进⾏解引⽤操作:*pa ,那找到的是 a
1 **ppa = 30;2 //等价于*pa = 30;3 //等价于a = 30;
六.指针数组
6.1--指针数组的定义
--我们先来思考一下指针数组是指针还是数组呢?

指针数组的每个元素都是用来存放地址(指针)的。指针数组的每个元素都是地址,又可以指向一块区域。
6.2--指针数组模拟二维数组
#include <stdio.h>
int main()
{int arr1[] = { 1,2,3,4,5 };int arr2[] = { 2,3,4,5,6 };int arr3[] = { 3,4,5,6,7 };//数组名是数组首元素的地址,类型是int*,所以可以存放在parr数组中int* parr[3] = { arr1, arr2, arr3 };int i = 0;int j = 0;for (i = 0; i < 3; i++){for (j = 0; j < 5; j++){printf("%d ", parr[i][j]);}printf("\n");}return 0;
}
parr[i]是访问parr数组的元素,parr[i]找到的数组元素指向了整型⼀维数组,parr[i][j]就是整型⼀维数组中的元素。
往期回顾:
【C语言】--指针超详解(一)
【C语言】--指针超详解(二)
结语:本篇文章就到此结束了,继前面两篇文章后在此篇文章中给大家分享了大量数组和指针之间相联系的知识点,还有冒泡排序等,如果文章对你有帮助的话,欢迎评论,点赞,收藏加关注,感谢大家的支持,后续会继续更新指针相关内容。
相关文章:
【C语言】--指针超详解(三)
目录 一.数组名的理解 二.使用指针访问数组 三.一维数组传参的本质 四.冒泡排序 五.二级指针 六.指针数组 6.1--指针数组的定义 6.2--指针数组模拟二维数组 🔥个人主页:草莓熊Lotso的个人主页 🎬作者简介:C方向学习者 &…...
污水处理厂逆袭:Ethernet/IP 转 CANopen 开启“智净”时代
在我们的日常生活中,污水处理厂发挥着至关重要的作用,它们处理着城市污水,确保我们的水源安全。然而,这些关键设施的运行和管理并非易事,尤其是在数字化转型的大潮中。现在,我们有了一款创新的解决方案——…...
ROS导航局部路径规划算法
在导航功能包中,局部路径规划器的位置如图红框所示。它接受全局路径规划器生成的全局路径以及里程计信息和局部代价地图,最后输出速度控制信息 一、DWA(Dynamic Window Approach) 原理介绍 DWA 是一种基于动态窗口采样的局部路…...
《深挖Java中的对象生命周期与垃圾回收机制》
大家好呀!👋 今天我们要聊一个Java中超级重要的话题——对象的生命周期和垃圾回收机制。 一、先来认识Java世界的"居民"——对象 👶 在Java世界里,一切皆对象。就像现实世界中的人一样,每个Java对象也有自…...
Java——包装类
目录 3.5 包装类 3.5 包装类 有时需要把基本类型转换为对象。所有基本类型都有一个与之对应的类。这些类称为包装器/类。这些类是不可变类,即一旦构造了包装器/类,就不允许改变包装在其中的值。其次包装类还是final,不用可以被继承。 为什么要…...
【谭浩强】第七章第14题
实验结果:当M1时输出的结果 实验总结:用define定义要频繁使用的值可以节省时间;求完一门课平均成绩之后要让sum重新等于0;求最高分对应的学生和对应的课程要循环完一遍覆盖一遍r和c的值; 程序代码 #include <stdi…...
Linux 内核中的 security_sk_free:安全模块与 Socket 释放机制解析
引言 在 Linux 内核中,网络通信和进程间交互(IPC)的核心数据结构之一是 struct sock(即 socket)。其生命周期管理涉及复杂的资源分配与释放逻辑。本文聚焦于 security_sk_free 这一函数,探讨其作用、调用场景以及与安全模块的交互机制,并解答一个常见疑问:在单机间 TC…...
学习笔记:黑马程序员JavaWeb开发教程(2025.4.1)
11.10 案例-配置文件-yml配置文件 Yml语法: 数据格式: 11.11 案例-配置文件-ConfigurationProperties 配置项自动注入,需要保持KEY的属性名一样,需要在文件中加上Data注解,要将这个类交给IOC容器管理,使其成…...
深度学习-161-Dify工具之对比使用工作流和聊天流生成图表可视化的html文件
文章目录 1 任务背景2 使用chatflow聊天流2.1 开始节点2.2 文档提取器2.3 LLM2.4 参数提取器2.5 代码执行2.6 直接回复2.7 应用展示3 生成html文件可视化图表3.1 使用workflow工作流3.1.1 LLM3.1.2 效果展示3.2 使用chatflow聊天流3.2.1 LLM3.2.2 效果展示4 参考附录分别使用聊…...
关于VScode的调试
调试代码要有这么几个工具:源代码、带调试符号的程序、MAP表,调试器。 在启动调试器之前,要首先编译带有符号表的程序,生成对应map。然后启动调试器。 不同的语言有不同的特性,比如解释型语言不需要编译成可执行程序…...
(x ^ 2 + 2y − 1) ^ 3 − x ^ 2 * y ^ 3 = 1
二元高次方程 EquationSolver20250509.java package math;import org.apache.commons.math3.analysis.MultivariateFunction; import org.apache.commons.math3.optim.InitialGuess; import org.apache.commons.math3.optim.MaxEval; import org.apache.commons.math3.optim.P…...
弹窗表单的使用,基于element-ui二次封装
el-dialog-form 介绍 基于element-ui封装的弹窗式表单组件 示例 git地址 https://gitee.com/chenfency/el-dialog-form.git 更新日志 2021-8-12 版本1.0.0 2021-8-17 优化组件,兼容element原组件所有Attributes及Events 2021-9-9 新增tip提示 安装教程 npm install …...
关系模式-无损连接和保持函数依赖的判断
1、怎样判断一个关系模式的分解是否是无损连接? 方法一:公式定理法 关系模式R<U,F>的一个分解具有无损连接的充分必要条件是: 或 方法二:表格法(常用与分解成3个及以上关系模式) a. 通过立一张j…...
Vmware 最新下载教程和安装教程,外带免下载文件
一、VMware 的简介 VMware 是一款功能强大的桌面虚拟计算机软件,提供用户可在单一的桌面上同时运行不同的操作系统,和进行开发、测试 、部署新的应用程序的最佳解决方案。VMware可在一部实体机器上模拟完整的网络环境,以及可便于携带的虚拟机…...
开平机:从原理到实践的全面技术剖析
一、开平机核心模块技术解析 1. 校平辊系的力学建模与辊型设计 校平机精度核心在于辊系设计,需通过弹塑性力学模型计算变形量。典型校平辊配置参数: 辊径比:校平辊直径(D)与板材厚度(t)需满足…...
Edu教育邮箱申请2025年5月
各位好,这里是aigc创意人竹相左边 如你所见,这里是第3部分 现在是选择大学的学科专业 选专业的时候记得考虑一下当前的时间日期。 比如现在是夏天,所以你选秋天入学是合理的。...
文本框碰撞测试
1.核心代码: // 初始化舞台和变量 var stage, textField, bounds, velocity;function init() {// 创建舞台stage = new createjs.Stage("canvas");// 设置矩形边界bounds = {x: 50, y: 50, width: 400, height: 300};// 绘制边界矩形var border = new createjs.Shap…...
LeRobot 项目部署运行逻辑(六)——visualize_dataset_html.py/visualize_dataset.py
可视化脚本包括了两个方法:远程下载 huggingface 上的数据集和使用本地数据集 脚本主要使用两个: 目前来说,ACT 采集训练用的是统一时间长度的数据集,此外,这两个脚本最大的问题在于不能裁剪,这也是比较好…...
Python函数:从基础到进阶的完整指南
在Python编程中,函数是构建高效、可维护代码的核心工具。无论是开发Web应用、数据分析还是人工智能模型,函数都能将复杂逻辑模块化,提升代码复用率与团队协作效率。本文将从函数基础语法出发,深入探讨参数传递机制、高阶特性及最佳…...
图灵爬虫练习平台第七题千山鸟飞绝js逆向
题目七:千山鸟飞绝 还是先进入开发者模式,一进来还是一个无限debugger,直接右键点击一律不在此处停留 然后点击下一页,复制curl进行代码生成,然后就会发现加密内容是headers中的m,ts,还有参数中的x…...
使用Python和OpenCV实现实时人脸检测与识别
前言 在计算机视觉领域,人脸检测与识别是两个非常重要的任务。人脸检测是指在图像中定位人脸的位置,而人脸识别则是进一步识别出人脸的身份。随着深度学习的发展,这些任务的准确性和效率都有了显著提升。OpenCV是一个开源的计算机视觉库&…...
Excel实现单元格内容拼接
一、应用场景: 场景A:将多个单元格拼接,比如写测试用例时,将多个模块拼接,中间用“-”隔开 场景B:将某单元格内容插入另一单元格固定位置(例如在B1中添加A1的内容) 二、实际应用&a…...
C语言实现:打印素数、最大公约数
本片博客起源于作者在经历了学校的测试之后猛然发现自己居然忘记了一些比较基础的代码,因此写了本片博客加强记忆 以下算法仅供参考 打印素数 打印:0到200之间所有的素数 #define _CRT_SECURE_NO_WARNINGS#include<stdio.h> #include<math.h&…...
TDengine 在智慧油田领域的应用
简介 智慧油田,亦称为数字油田或智能油田,是一种采用尖端信息技术与先进装备的现代油田开发模式。该模式通过实时更新油气田层析图及动态生产数据,显著提高了油气田的开发效率与经济价值。 信息技术在此领域发挥着至关重要的作用࿰…...
将 iconfont 图标转换成element-plus也能使用的图标组件
在做项目时发现,element-plus的图标组件,不能像文档示例中那样使用 iconfont 的图标。经过研究发现,element-plus的图标封装成了vue组件,组件内容是一个svg,然后以组件的方式引入和调用图标。根据这个思路,…...
使用程序绘制中文字体——中文字体的参数化设计方案初探
目录 写在前面基本设计思路笔画骨架参数设计笔画风格参数设计起笔风格转角风格字重变化弯曲程度 字形的“组装拟合”基于骨架的结构调整笔画绘制二三事撇的两侧轮廓绘制——不是两条贝塞尔曲线那么简单转角的处理,怎样能显得不突兀?笔画骨架关键点的拖拽…...
高频数据结构面试题总结
基础数据结构 1. 数组(Array) 特点:连续内存、固定大小、随机访问O(1)常见问题: 两数之和/三数之和合并两个有序数组删除排序数组中的重复项旋转数组最大子数组和(Kadane算法) 2. 链表(Linked List) 类型:单链表、双链表、循环链表常见问…...
工业设计破局密码:3D 可视化技术点燃产业升级引擎
3D可视化是一种将数据、信息或抽象概念以三维图形、模型和动画的形式呈现出来的技术。3D可视化技术通过构建三维数字孪生体,将设计思维转化为可交互的虚拟原型,不仅打破了传统二维设计的空间局限,更在效率、精度与用户体验层面开创了全新维度…...
【动态导通电阻】p-GaN HEMTs正向和反向导通下的动态导通电阻
2024 年,浙江大学的 Zonglun Xie 等人基于多组双脉冲测试方法,研究了两种不同技术的商用 p-GaN 栅极 HEMTs 在正向和反向导通模式以及硬开关和软开关条件下的动态导通电阻(RON)特性。实验结果表明,对于肖特基型 p-GaN 栅极 HEMTs,反向导通时动态 RON 比正向导通高 3%-5%;…...
Python代码编程基础
字符串 str.[]实现根据下标定位实现对元素的截取 for 循环可以实现遍历 while 循环可以在实现遍历的同时实现对某一下标数值的修改 字符串前加 r 可以实现对字符串的完整内容输出 字符串前加 f 可以实现对字符串内{}中包裹内容的格式化输出,仅在 v3.6 之后可用…...
基于RAG+MCP开发【企文小智】企业智能体
一、业务场景描述 1.1、背景介绍 几乎每家企业都积累了大量关于规章制度的文档资料,例如薪酬福利、绩效考核、保密协议、考勤管理、采购制度、资产管理制度等。这些文档大多以 Word、PDF 等非结构化格式存在。传统方式下,员工在查询某项具体规则时&…...
【软件测试】测试用例的设计方法
目录 一、基于需求进行测试用例的设计 1.1 功能需求测试分析 二、黑盒测试用例设计方法 2.1 等价类划分法(解决穷举) 2.1.1 等价类设计步骤 2.1.2 等价类划分法案例 2.1.2.1 验证 QQ 账号的合法性 2.1.2.2 验证某城市电话号码的正确性 2.1.3 适用场景 2.2 边界值分析…...
计算机网络笔记(十八)——3.5高速以太网
3.5.1 100BASE-T以太网 1. 基本概念 标准规范:IEEE 802.3u,是快速以太网的典型代表,运行速率100Mbps。物理介质:使用双绞线(UTP或STP),支持最大传输距离100米(Cat5/5e及以上&#…...
海外广告账号资源解析:如何选择适合业务的广告账户?
在全球化数字营销的浪潮下,海外广告投放已成为企业拓展市场的核心手段。然而,不同平台的广告账号类型复杂多样,如何选择适合自身业务的资源?本文将深度解析 Facebook、Google、TikTok 三大平台的广告账号类型,助您精准…...
Java设计模式之建造者模式:从入门到精通
1. 建造者模式概述 1.1 定义与核心概念 **建造者模式(Builder Pattern)**是一种创建型设计模式,它将复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。 专业术语解释表: 术语解释产品(Product)最终要构建的复杂对象建造者(Builder)定义创建产品各个…...
Faiss 索引深度解析:从基础到实战
在处理高维数据的相似性搜索时,Faiss(Facebook AI Similarity Search)无疑是一款强大且高效的工具。它为我们提供了多种索引类型,适用于不同规模和需求的数据场景。本文将结合代码实例,深入剖析 Faiss 中常见索引的原理…...
Error parsing column 10 (YingShou=-99.5 - Double) dapper sqlite
在使用sqlite 调取 dapper的时候出现这个问题提示: 原因是 在 sqlite表中设定的字段类型是 decimel而在C#的字段属性也是decimel,结果解析F负数 小数的时候出现这个错误提示: 解决办法:使用默认的sqlite的字段类型来填入 REAL描述…...
星云智控:物联网时代的设备守护者——卓伊凡详解物联网监控革命-优雅草卓伊凡
星云智控:物联网时代的设备守护者——卓伊凡详解物联网监控革命-优雅草卓伊凡 一、物联网的本质解析 1.1 什么是物联网? 当卓伊凡被问及”星云智控物联网是干嘛的”这个问题时,他首先给出了一个技术定义:物联网(Int…...
LeRobot 项目部署运行逻辑(五)——intelrealsense.py/configs.py
在运行 control_robot.py 的时候会启用相机拍摄,lerobot 中封装好了两种相机类型:realsense 和 opencv realsense 直接使用他们的脚本就可以,但需要在 lerobot/robot_devices/robots/configs.py 中修改相机 serial_number 由于我们设备采用的…...
从0开始学linux韦东山教程第一三章问题小结(1)
本人从0开始学习linux,使用的是韦东山的教程,在跟着课程学习的情况下的所遇到的问题的总结,理论虽枯燥但是是基础。 摘要关键词:VMware、Ubuntu、网络网口 视频链接:【【韦东山】韦东山手把手教你嵌入式Linux快速入门到精通 | Lin…...
解决 MySQL 数据库无法远程连接的问题
在使用 MySQL 数据库时,遇到这样的问题: 本地可以连接 MySQL,但远程机器连接时,总是报错 Host ... is not allowed to connect to this MySQL server。 这通常是因为 MySQL 的用户权限或配置限制了远程访问。 1. 登录 MySQL 数据…...
分享一款开源的图片去重软件 ImageContrastTools,基于Electron和hash算法
最近发现个挺实在的图片查重软件,叫ImageContrastTools。电脑手机都能用,特别适合整理乱七八糟的相册。直接去这里下载就能用: https://github.com/html365/ImageContrastTools 功能说明: 1️⃣ 选个文件夹就能自动扫重复图&…...
软件测试——用例篇(2)
目录 一、基于需求的设计方法 1.1设计账号注册、账号登录的测试用例 1.1.1功能测试 1.1.2界面测试 1.1.3性能测试 1.1.4兼容性测试 1.1.5易用性测试 1.1.6安全测试 一、基于需求的设计方法 根据参考需求文档/产品规格说明书来设计测试用例 测试人员接到需求之后、对需求…...
图像匹配导航定位技术 第 11 章
第 11 章 基 于 改 进 SIFT 的 SAR 与 可 见光 图 像 匹 配 控 制 点 定 位 算 法 HOG 描述子也只是对整幅图像的特征向量进行匹配,但是仍然存在局部匹配误差。而局部不变特征(如 SIFT,Harris 等)是对特征点局部邻域的特征进行描述来构造局部…...
安装jdk步骤
将Linux安装jdk的步骤放入shell脚本中 #!/bin/bash # 阿里云服务器专用 - 全自动安装 OpenJDK 1.8(无交互) # 仅支持 yum 系系统(CentOS/RHEL/Alibaba Cloud Linux)# 检查 root 权限 if [ "$(id -u)" -ne 0 ]; thenech…...
理解 `.sln` 和 `.csproj`:从项目结构到构建发布的一次梳理
理解 .sln 和 .csproj:从项目结构到构建发布的一次梳理 在初学 .NET 项目开发时,很多人都会对 .sln(解决方案)和 .csproj(项目)文件感到疑惑。随着开发经验的积累,我逐渐理解了这些层级的设计意…...
高频算法面试题总结
高频算法面试题总结 排序算法 1. 基础排序算法 快速排序: public void quickSort(int[] arr, int low, int high) {if (low < high) {int pivot = partition(arr, low, high);quickSort(arr, low, pivot - 1);quickSort(arr, pivot + 1, high);} }平均时间复杂度:O(n lo…...
SQL进阶:如何把字段中的键值对转为JSON格式?
JSON 一、问题描述二、ORACLE<一>、键值对拆分(REGEXP_SUBSTR)<二>、转为JSON<三>、不足 三、MYSQL<一>、键值对拆分(RECURSIVE)<二>、转为JSON 一、问题描述 假如某张表的某列是键值对数据,如何把这个键值对转为json格式,数据如下所示 dynast…...
vue3:十二、图形看板- echart图表-柱状图、饼图
一、效果 如图展示增加了饼图和柱状图,并且优化了浏览器窗口大小更改,图表随着改变 二、 饼图 1、新建组件文件 新增组件EchartsExaminePie.vue,用于存储审核饼图的图表 2、写入组件信息 (1)视图层 写入一个div,写入变量chart和图表宽高 <template><div ref…...
nacos-server-2.2.2.tar及使用方式
下载链接 nacos-server-2.2.2.tar包及使用资源-CSDN文库 下载与安装 下载地址:可从 Nacos 官网版本下载页面 或 Nacos GitHub Releases 获取 nacos-server-2.2.2.tar.gz 安装包。 环境准备:Nacos 依赖 Java 环境运行,需确保安装了 64 位 J…...