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

C语言-3

定义指针

/*指针的概念:1.为了方便访问内存中的内容,给每一个内存单元,进行编号,那么我们称这个编号为地址,也就是指针。2.指针也是一种数据类型,指针变量有自己的内存,里面存储的是地址,也就是那些编号。四要素1.指针本身的类型    例如:float*    int*    ...2.指针指向的类型    例如:float        int        ...3.指针本身的内存4.指针指向的内存运算符*:1.定义指针时,通过 * 符号,来表示定义的是一个指针,并且是指针自身的类型的组成部分2.其他时候,表示解析引用(取内容:通过内存编号,读取内存中的内容)&:取(首)地址符,作用:取出(内存的)首地址
*/# include <stdio.h>int main()
{// 定义指针(指针:pointer)float* p_name;    // 指针本身的类型:float*    指针指向的类型:floatint * p1;int *p2;        // * 符号偏不偏移不影响其功能return 0;
}

指针初始化与赋值

/*知识储备:// 初识化:定义的同时,给值int a = 0;// 赋值:先定义,再给值int b;b = 0;
*/# include <stdio.h>int main()
{    // 初始化int num = 6;int val = 8;// 初始化int* p1 = &num;    // 对于指针变量p1,如果进行给值,必须给地址(内存编号)// 赋值int* p2;p2 = &val;// 自行体会int* p3 = p1;// 直接存入地址(不推荐使用,因为你不知道自己随便写的地址里面是什么!!)int* p4 = (int*)123456;    // 将 整型123456 强转为 int*类型 的“地址”int* p5 = (int*)0XAB25;    // 计算机中的内存地址通常用16进制数表示// 直接使用地址:置空(即:"使用0地址,NULL:0X0")int* p6 = NULL;    // 等价于 int* p6 = (int*)0X0;// 目的:为了给暂无指向的指针,提供指向,保证安全,将内存中的0地址特殊化// 数组名就是数组的首地址int arr[3] = { 1, 2, 3 };// 数组类型:int [3]// 元素类型:int// arr 类型:int*int* p7 = arr;return 0;
}

探究内存

/*1.变量在内存中所占的字节数所有的指针变量,不论类型,在内存中所占的字节数都是一样的,都是4个字节(或者8个字节)(8个字节是因为时代的发展,部分好的计算机性能得到提升,一般都是4个字节)2.指针本身的内存,以及指针指向的内存指针本身的内存:4个字节(指针变量只需要存储,所指向的变量的首地址)指针指向的内存:看你所指向的类型,视情况而定
*/# include <stdio.h>int main()
{    double num = 12.0;double* p1 = &num;printf("%f \n", num);printf("%f \n", *p1);    // 利用指针,取得 num 的值return 0;
}

在这里插入图片描述

指针的偏移

在这里插入图片描述

  • 大端模式与小端模式:前往学习

内存区域划分-基础

/*
内存区域的划分
四个:常量区,栈区,堆区,静态全局区
五个:常量区,栈区,堆区,静态全局区,代码区1.代码区:存代码
2.常量区:存常量
3.静态全局区:静态(static)变量,全局变量
4.栈区:普通局部变量
5.堆区:由程序员手动申请,手动释放
*/# include <stdio.h>int a;                // 普通“全局”变量(初识值默认为零)
// 作用域:当前项目
// 生命周期:程序开始到结束static int b;        // 静态“全局”变量(初识值默认为零)
// 作用域:当前文件
// 生命周期:程序开始到结束int main()
{    int c;            // 普通局部变量(无初始值)// 作用域:当前语块// 生命周期:当前语块static int d;    // “静态”局部变量(初识值默认为零)// 作用域:当前语块// 生命周期:程序开始到结束return 0;
}
# include <stdio.h>void func()
{static int num;        // 只会定义一次printf("%d \n", num);num++;printf("%d \n", num);}int main()
{    func();func();func();return 0;
} /*运行结果:011223请按任意键继续. . .
*/

空类型指针

/*void* 指针1.不能自增自减2.不能偏移3.不能读取内容但是!可以接收任何类型的指针而不需要强转类型可以利用这个特点,将 void* 指针当作通用的存放地址的“容器”e.g.int a = 6,b = 8.8;int* p1 = &a;double* p2 = &b;void* p0 = NULL;    // 当作存放“内存地址”的容器使用p0 = p1;p0 = p2;...*/# include <stdio.h>int main()
{    void* p0 = NULL;return 0;
}

简单开辟内存

/*简单开辟内存1.申请---有两个函数能够实现申请内存的功能:A. malloc(参数:需要字节的总数);B. calloc(参数:每个需要的字节数,个数);返回值都是 void* 类型的指针2.使用3.释放free(参数:首地址)如果不释放的话,会导致“内存泄露”4.置空如果不置空的话,会出现“野指针”
*/# include <stdio.h>int main()
{    /* malloc */double* p = (double*)malloc(sizeof(double));    // 申请一个double类型大小的内存(8字节)*p = 3.14;    // 使用printf("%lf \n", *p);free(p);    // 通过 p 里面存储的首地址,找到相对应的内存,从这里开始释放,一直释放到,申请内存的时候,做了标记的地方p = NULL;    // 通过置空,让指针不再指向已经被释放掉的内存/* calloc */float* p1 = (float*)calloc(sizeof(float),1);*p1 = 3.14f;printf("%f \n", *p1);free(p1);p1 = NULL;printf("进阶运用 \n");// 进阶运用p = (double*)malloc(sizeof(double)*10);    // 申请10个 double 类型大小的连续的内存(补充:因为上面将p定为 double* 而且置空过了,所以可再度利用)for (int i = 0; i < 10; i++ ){    *(p + i) = 10 + i;    // 给值printf("%lf \n", *(p + i));    // 展示值}free(p);p = NULL;/*对于上面 for 循环部分的补充:p:里面存的是:申请的内存的首地址在一次申请中,申请的内存是连续的*(p + i) <===> p[i]        // 注意!它不是数组!*/return 0;
}
# include <stdio.h>int main()
{    // 指针布局int row = 3;int** pp = (int**)calloc(sizeof(int*), row);int len = 4;for (size_t i = 0; i < row; i++)    // size_t是什么?点我跳转学习{pp[i] = (int*)calloc(sizeof(int), len);}// 内容展示for (size_t i = 0; i < row; i++){for (size_t j = 0; j < len; j++){    pp[i][j] = i * 10 + j;    // 给值printf("%-5d", pp[i][j]);    // 展示值,注意!这里不是二维数组!(看不懂请回顾上页内容)}printf("\n");}// 释放内存for (size_t i = 0; i < row; i++){free(pp[i]);pp[i] = NULL;}free(pp);pp = NULL;return 0;
}

自动扩容

# include <stdio.h>int main()
{    int len = 5;    // 默认长度int* p = (int*)calloc(sizeof(int), len);int num = 1;for (size_t i = 0; num != 0; i++)    // 用户不输入0结束,就一直获取数据并复制到开辟的内存中{scanf("%d", &num);p[i] = num;        // 数据复制到开辟的内存中}for (size_t i = 0; p[i] != 0; i++){printf("%-5d", p[i]);    // 展示数据}free(p);p = NULL;return 0;
}
/*扩容的本质是:将小内存中的所有内容拷贝到大内存中,然后,再继续对大内存进行别的操作
*/# include <stdio.h>int main()
{    // 长度int len = 5;// 首次申请内存int* p = (int*)calloc(sizeof(int), len);int* temp = p;    // 成为p的分身,以防万一// 重复输入数据(并复制到内存中)int num = 1;int i = 0;while (scanf("%d", &num), num != 0){if (i < len)    // 没满的情况下{temp[i++] = num;    // 存完一次,记录一下}else   // 满了的情况下{len += 5;p = (int*)calloc(sizeof(int), len);        // 重新申请更大的内存for (int j = 0; j < i; j++){p[j] = temp[j];}free(temp);temp = NULL;temp = p;    // 继续成为当前p的分身temp[i++] = num;}}// 输出数据printf("--------------------\n");for (int j = 0; j != i; j++){printf("%d \n", temp[j]);}free(p);p = NULL;temp = NULL;return 0;
}

内存区域划分-进阶

/*内存区域的划分1.代码区存储代码2.常量区存储常量3.全局区(静态全局区)存储: 1.静态变量    2.全局变量# include <stdio.h>int c;            // 普通全局变量static int d;    // 静态全局变量int main(){int a;            // 普通局部变量static int b;    // 静态局部变量int c;    // 注意这个c不是上面的c,它们只是名字看起来一样而已a = 10;        // 普通局部变量没有默认初始值,所以需要自己赋值printf("a = %d \n", a);printf("b = %d \n", b);printf("c = %d \n", c);printf("d = %d \n", d);// 通过以上 printf,可以总结规律:静态全局区,默认的初始值为0// 作用域和生命周期作用域            生命周期普通全局变量        当前项目        程序开始到程序结束静态全局变量        当前文件        程序开始到程序结束普通局部变量        当前语块        当前语块静态局部变量        当前语块        程序开始到程序结束return 0;}4.栈区存储:普通局部变量从定义时系统自动分配内存,离开当前语块系统就会自动回收内存 5.堆区由程序员手动申请和释放
*/

指针与函数

/*1.指针函数返回值类型是指针的函数2.函数指针指向函数的指针
*/
// 1.指针函数// 下面的代码是一个错误的例子,你能发现它的错误吗?
# include <stdio.h>int* test();    // 声明int main()
{    int* temp = test();printf("%d \n", *temp);return 0;
} int* test()
{int num = 10;int* p = &num;return p;    // 返回了栈区变量的首地址(非常严重的问题!详情见下)
}/*下面的内容是在栈区,当运行完毕,系统会回收其内存资源:int* test(){int num = 10;int* p = &num;return p;}当函数返回栈区变量 num 的内存地址之后,函数运行完毕,系统回收 num 内存,供以后"某某东西"使用所以,返回的地址不但没有作用,还会导致以后非法访问内存的问题出现*/
// 2.函数指针/*函数指针的定义返回类型说明符 (*函数指针变量名)(参数列表);
*/# include <stdio.h>int func();    // 声明int main()
{    // 定义函数指针,并进行初始化int(*p)() = func;    // 即:定义了指针p,而且 p 等于 func(func里面存的是函数的首地址)func();p();return 0;
}int func()
{printf("成功执行了 func 函数!\n");return 6;
}
// 函数指针,知识扩展1# include <stdio.h>int func();    // 声明typedef int funcType();    // 将 int...() 取别名为 funcTypeint main()
{    funcType* p = func;p();return 0;
}int func()
{printf("成功执行了 func 函数!\n");return 6;
}
// 函数指针,知识扩展2# include <stdio.h>int func(int a, int b);    // 声明typedef int(*pfunc)(int a, int b);int main()
{    pfunc p = func;        // 这样也能定义函数指针int res = p(1,2);printf("%d \n", res);return 0;
}int func(int a, int b)
{printf("成功执行了 func 函数!\n");return a + b;
}

指针与数组

/*1.指针数组......2.数组指针......
*/
// 1.指针数组/*# include <stdio.h>int main()
{    // 定义并初始化"数组"int arr1[3] = { 1, 2, 3 };    // 数组 arr1[3] -> 里面存的都是 int 类型// 定义并初始化"指针数组"int* arr2[3] = { 地址1,地址2,地址三 };    // 数组 arr2[3] -> 里面存的都是 int* 类型arr2[2] = 新地址;return 0;
} */
// 2.数组指针/*定义"数组"指针:所指向的数组里面存的数据类型 (*数组指针名称)[所指向的数组的长度];
*/# include <stdio.h>int main()
{    int arr[3] = { 1, 2, 3 };    // 建立一个数组。
//    arr 里面存的是数组内存的首地址,而 [] 表示内存里面存的那一堆东西是数组,3 表示数组长度,int 表示数组里面存的数据是 int 类型int(*p)[3];    // 长度为 3 的数组指针p = arr;printf("%d \n", p[1]);return 0;
}
// 数组指针,知识扩展# include <stdio.h>typedef int(*pType)[3];    // 定义类型:int(*pType)[3],取别名为:pTypeint main()
{    int arr[3] = { 1, 2, 3 };pType p;    // 变量 p 的类型为 pType,而属于这种类型的变量 p 必然满足 int(*pType)[3] 模板格式p = arr;    // arr里面储存的“数组的内存首地址”复制给变量 pprintf("%d \n", (*p)[0]);    // 注意!不要写成 p[0],虽然 p 获得了 arr 里面存的首地址,但是 *p 才是代表数组整体return 0;
} /*同理:# include <stdio.h>typeof int pArr[3];int main(){int arr[3] = { 1, 2, 3 };pArr p;p = arr;}
*/

使用const修饰指针

/*const:常量,被它修饰的变量会具有常量的属性,使用 const 修饰指针包含三种情况1.常量指针(指向常量的指针)指向常量的指针 type const *p; 或者 const type *p;可以改变指向,但是不能用 *p 修改指向变量的值2.指针常量它是常量,本身不能改变,也就是不能改变指向因为指向不能改,所以必须初始化但是可以通过取内容修改指向的内存中的内容3.常量指针常量("常量指针"常量即:指针常量)指针本身是一个常量,指向的也是常量const int * const p = &a;不能改变指向,也不能改变指向的内存的内容
*/# include <stdio.h>int main()
{const int num = 0;    // 变量 num 使用 const 修饰了就不能被修改了// 1.常量指针int a = 0, b = 9;const int * p = &a;        // const -> intp = &b;    // 可以改变指向// 2.指针常量int c = 6;int* const p1 = &c;        // const -> p1*p1 = 10;    // 可以修改内容// 3.常量指针常量int d = 8;const int* const p = &d;    // const -> int 和 preturn 0;}

指针和结构体

/*指针与结构体:指针与结构体结合起来使用包含两种情况:一.指针成员结构体变量的成员中存在指针二.结构体指针指向结构体变量的指针
*/
// 指针成员# include <stdio.h>typedef struct
{int n;int m;int* p;    // 定义指针}MyStruct;int main()
{MyStruct mystr;mystr.n = 0;mystr.m = 0;mystr.p = NULL;    // 地址置空return 0;}
// 结构体指针# include <stdio.h>typedef struct
{int n;int m;}MyStruct;int main()
{MyStruct mystr;mystr.n = 0;mystr.m = 0;MyStruct* p = NULL;    // 定义一个指针 p ,它的类型是 MyStruct*,即该指针指向的是有 MyStruct 类型的变量(首地址)p = &mystr;    // mystr 便符合条件,可以将首地址 &mystr 赋值给 p// 注意!通过指针访问“结构体中的元素”的时候,用 -> 符号,而不是用 . 符号p->n = 9;p->m = 8;return 0;}

使用指针的注意事项

/*注意事项1.避免野指针推荐:每次定义指针都进行初始化(有指向就给指向,没指向就置空 )2.注意类型匹配3.防止内存泄漏只有堆区是自己申请,自己释放,其他地方都是系统分配,系统回收总结:指针能够直接操作内存,必须在自己明确用途的情况下使用,否则很可能会造成严重后果!
*/

相关文章:

C语言-3

定义指针 /*指针的概念:1.为了方便访问内存中的内容&#xff0c;给每一个内存单元&#xff0c;进行编号&#xff0c;那么我们称这个编号为地址&#xff0c;也就是指针。2.指针也是一种数据类型&#xff0c;指针变量有自己的内存&#xff0c;里面存储的是地址&#xff0c;也就是…...

Quartus工程的qsf配置约束文件介绍

一、qsf文件概述 qsf&#xff1a;Quartus Setting File&#xff0c;是Quartus工程的配置文件&#xff1b; 包含一个Quartus工程的所有约束&#xff0c;包括工程的软件版本信息、FPGA器件信息、引脚约分配、引脚电平分配&#xff0c;编译约束和用于Classic TimingAnalyzer的时…...

【网工】华为设备命令学习(Telnet)

本次实验AR3为我们实际中远程的路由&#xff0c;AR4模拟我们的设备&#xff0c;最终实现Telnet的远程控制路由&#xff01; 本次笔记主要记录Telnet技术实现原理&#xff0c;后续再补充具体配置代码。 Telnet协议是TCP/IP协议族中的一员&#xff0c;是Internet远程登录服务的…...

搜索专项---最短路模型

文章目录 迷宫问题武士风度的牛抓住那头牛 一、迷宫问题OJ链接 本题思路:只需要记录各个点是有哪个点走过来的&#xff0c;就能递推得出路径。记录前驱假设从 1,1 这个点向下走到了2, 1&#xff0c;则将2,1这个点的前驱记为1,1。这样&#xff0c;将整张地图 bfs 后&#xff0c…...

安装PostgreSQL和PostGIS

安装环境 Windows 2019 Standard Server 安装PostgreSQL 安装PostgreSQL 16 安装PostGIS 用PostgreSQL 16对应的PostGIS https://download.osgeo.org/postgis/windows/pg16/ https://download.osgeo.org/postgis/windows/pg16/postgis-bundle-pg16x64-setup-3.4.1-1.exe 创建…...

MySQL-----DCL基础操作

▶ DCL简介 DCL英文全称是Data ControlLanguage(数据控制语言)&#xff0c;用来管理数据库用户、控制数据库的访问权限。 DCL--管理用户 ▶ 查询用户 use mysql; select * from user; ▶ 创建用户 ▶ 语法 create user 用户名主机名 identified by 密码 设置为在任意主机上访问…...

Unity报错Currently selected scripting backend (IL2CPP) is not installed

目录 什么是il2cpp il2cpp换mono Unity打包报错Currently selected scripting backend (IL2CPP) is not installed 什么是il2cpp Unity 编辑器模式下是采用.net 虚拟机解释执行.net 代码,发布的时候有两种模式,一种是mono虚拟机模式,一种是il2cpp模式。由于iOS AppStore…...

LeetCode79. Word Search——回溯

文章目录 一、题目二、题解 一、题目 Given an m x n grid of characters board and a string word, return true if word exists in the grid. The word can be constructed from letters of sequentially adjacent cells, where adjacent cells are horizontally or vertic…...

Linux命令-blkid命令(查看块设备的文件系统类型、LABEL、UUID等信息)

说明 在Linux下可以使用 blkid命令 对查询设备上所采用文件系统类型进行查询。blkid主要用来对系统的块设备&#xff08;包括交换分区&#xff09;所使用的文件系统类型、LABEL、UUID等信息进行查询。要使用这个命令必须安装e2fsprogs软件包。 语法 blkid -L | -U blkid [-c…...

服务治理中间件-Eureka

目录 简介 搭建Eureka服务 注册服务到Eureka 简介 Eureka是Spring团队开发的服务治理中间件&#xff0c;可以轻松在项目中&#xff0c;实现服务的注册与发现&#xff0c;相比于阿里巴巴的Nacos、Apache基金会的Zookeeper&#xff0c;更加契合Spring项目&#xff0c;缺点就是…...

Javaweb之SpringBootWeb案例之异常处理功能的详细解析

3. 异常处理 3.1 当前问题 登录功能和登录校验功能我们都实现了&#xff0c;下面我们学习下今天最后一块技术点&#xff1a;异常处理。首先我们先来看一下系统出现异常之后会发生什么现象&#xff0c;再来介绍异常处理的方案。 我们打开浏览器&#xff0c;访问系统中的新增部…...

苹果Mac键盘如何将 F1 到 F12 取消按Fn

苹果电脑安装了Win10操作系统之后&#xff0c;F1到F12用不了怎么办的解决方法。本文将介绍一些解决方法&#xff0c;帮助您解决无法使用F1到F12功能键的问题。 使用 Mac系统的人都知道&#xff0c;Mac系统默认是没有开启 F1-F12 的使用的&#xff0c;平时我们使用的系统都可以使…...

linux下ipconfig命令报:command not found 解决方法

参考博文&#xff1a; linux下ipconfig命令报:command not found 解决方法 CentOS7更新yum报Could not resolve host:mirrorlist.centos.org; Unknown error解决办法...

Android导入其它项目慢,Gradel下载失败,另辟蹊径:使用离线gradle加载,附镜像方式

最近在开发中需要测试以前写的小项目。结果忘了换本地的gradle&#xff0c;提示下载失败。换了现在用的gradle&#xff0c;项目能跑了。虽然网上有很多很多教程了&#xff0c;但对我的情况也不是都适用。所以自己记录一下。本人水平有限&#xff0c;有不对的地方请帮我指正&…...

神经语言程式(NLP)项目的15 个开源训练数据集

一个聊天机器人需要大量的训练数据,以便在无需人工干预的情况下快速解决用户的询问。然而,聊天机器人开发的主要瓶颈是获取现实的、面向任务的对话数据来训练这些基于机器学习的系统。 我们整理了训练聊天机器人所需的对话数据集,包括问答数据、客户支持数据、对话数据和多…...

H5 红色文字抖动网址发布页/引导页源码

H5 红色文字抖动网址发布页/引导页源码 源码介绍&#xff1a;一款红色文字抖动网页源码&#xff0c;可用于引导页或网址发布页。 下载地址&#xff1a; https://www.changyouzuhao.cn/10470.html...

MacOS - 菜单栏上显示『音量』

教程步骤 点击打开系统偏好『设置』&#xff0c;并找到『控制中心』 在『控制中心模块』找到『声音』&#xff0c;选择『始终在菜单栏显示』...

深入理解常见的设计模式

目录 引言 1. 单例模式&#xff08;Singleton Pattern&#xff09; 应用场景&#xff1a; 示例代码&#xff1a; . 工厂模式&#xff08;Factory Pattern&#xff09; 应用场景&#xff1a; 示例代码&#xff1a; 3. 观察者模式&#xff08;Observer Pattern&#xff09…...

服务器解析漏洞及任意文件下载

1.服务器文件解析漏洞 文件解析漏洞,是指Web容器&#xff08;Apache、nginx、iis等&#xff09;在解析文件时出现了漏洞,以其他格式执行出脚本格式的效果。从而,黑客可以利用该漏洞实现非法文件的解析。 &#xff08;1) Apache linux系统中的apache的php配置文件在/etc/apac…...

ES6扩展运算符——三个点(...)用法详解

目录 1 含义 2 替代数组的 apply 方法 3 扩展运算符的应用 &#xff08; 1 &#xff09;合并数组 &#xff08; 2 &#xff09;与解构赋值结合 &#xff08; 3 &#xff09;函数的返回值 &#xff08; 4 &#xff09;字符串 &#xff08; 5 &#xff09;实现了 Iter…...

限制资源使用

限制资源使用 您需要显示对服务器资源的访问来保护Web应用程序和应用程序数据不受未授权用户的访问。在Java EE Web应用程序中,您可以通过在应用服务器中创建用户和用户组来保护资源免受未经授权的访问。您可以为应用程序定义角色并在部署过程中将角色分配给用户。 1. 创建授权…...

结合Next项目实际认识webpack.splitChunks

本文的目的在于简单的介绍webpack的优化功能配置&#xff1a;splitChunks。 webpack5出于“开箱即用”的目的&#xff0c;将大部分曾经要使用插件的功能集成到了config配置中&#xff0c;因此用户只需要了解如何配置&#xff0c;即可达到优化目的&#xff0c;其中最常使用接触的…...

【Tauri】(2):使用Tauri应用开发,使用开源的Chatgpt-web应用做前端,使用rust 的candle做后端,本地运行小模型桌面应用

视频演示地址 https://www.bilibili.com/video/BV17j421X7Zc/ 【Tauri】&#xff08;2&#xff09;&#xff1a;使用Tauri应用开发&#xff0c;使用开源的Chatgpt-web应用做前端&#xff0c;使用rust 的candle做后端&#xff0c;本地运行小模型桌面应用 1&#xff0c;做一个免…...

C#where T :通用的泛型约束(generic constraint)语法

在C#中&#xff0c;where T :是一种通用的泛型约束&#xff08;generic constraint&#xff09;语法&#xff0c;用于限制泛型类型参数T的特定条件。通过使用泛型约束&#xff0c;我们可以对泛型类型参数进行更具体的限制&#xff0c;以确保在使用泛型时满足特定的要求。 wher…...

vue使用Mars3d弹框嵌套video视频/实时视频(m3u8)使用hls.js

下载hls.js http://mars3d.cn/lib/video/hls/hls.js下载 1.首先绘制地图我使用的天地图 async infoMars3d() {const that this;var mapOptions {scene: {center: {lat: 30.435192,lng: 103.936535,alt: 200000,heading: 359,pitch: -79},highDynamicRange: false},// 方式1&a…...

Python爬虫之Ajax数据爬取基本原理

前言 有时候我们在用 requests 抓取页面的时候&#xff0c;得到的结果可能和在浏览器中看到的不一样&#xff1a;在浏览器中可以看到正常显示的页面数据&#xff0c;但是使用 requests 得到的结果并没有。这是因为 requests 获取的都是原始的 HTML 文档&#xff0c;而浏览器中…...

osg操控器和键盘切换操控器学习

osg提供了很多操控器,在src\osgGA目录下,cpp文件名含有Manipulator的都是操控器,每个这样的cpp表示一种类型的操控器。 名字带 Manipulator 的类都是操控器; 其中KeySwitchMatrixManipulator.cpp文件实现了键盘切换操控器; 操控器是指:操控相机运动,从而实现场景视图…...

LeetCode1143. Longest Common Subsequence——动态规划

文章目录 一、题目二、题解 一、题目 Given two strings text1 and text2, return the length of their longest common subsequence. If there is no common subsequence, return 0. A subsequence of a string is a new string generated from the original string with so…...

利用Windows10漏洞破解密码(保姆级教学)

前言: 本篇博客只是技术分享并非非法传播知识,实验内容均是在虚拟机中进行,并非真实环境 正文: 一.windows10电脑密码破解 1)开启windows10虚拟机,停留在这个页面 2&#xff09;按5次Shift键,出现这个粘滞键,如果没有出现的,则说明漏洞已经修复 3)重新启动,在这个页面的时候…...

apk反编译修改教程系列---简单修改apk默认横竖屏显示 手机端与电脑端同步演示【十一】

往期教程&#xff1a; apk反编译修改教程系列-----修改apk应用名称 任意修改名称 签名【一】 apk反编译修改教程系列-----任意修改apk版本号 版本名 防止自动更新【二】 apk反编译修改教程系列-----修改apk中的图片 任意更换apk桌面图片【三】 apk反编译修改教程系列---简单…...

2301: 不定方程解的个数

题目描述 输出不定方程解的个数。在数学中&#xff0c;不定方程是数论中的一个重要课题&#xff0c;在各种比赛中也常常出现. 对于不定方程&#xff0c;有时我们往往只求非负整数解&#xff0c;现有方程axbyc0&#xff0c;其中x、y为未知量且不超过10000&#xff0c;当给定a、…...

vue3学习——封装菜单栏

/Layout/Sidebar/index.vue <script setup lang"ts"> import Sidebar from ./Sidebar.vue // 在下面的代码里 import { useRoute } from vue-router import useUserStore from /store/modules/user.ts // state中存放菜单数据 import useLayoutSetting from /…...

深度学习的进展及其在各领域的应用

深度学习&#xff0c;作为人工智能的核心分支&#xff0c;近年来在全球范围内引起了广泛的关注和研究。它通过模拟人脑的学习机制&#xff0c;构建复杂的神经网络结构&#xff0c;从大量数据中学习并提取有用的特征表示&#xff0c;进而解决各种复杂的模式识别问题。 一、深度…...

blender怎么保存窗口布局,怎么设置默认输出文件夹

进行窗口布局大家都会&#xff0c;按照自己喜好来就行了&#xff0c;设置输出文件夹如图 这些其实都简单。关键问题在于&#xff0c;自己调好了窗口布局&#xff0c;或者设置好了输出文件夹之后&#xff0c;怎么能让blender下次启动的时候呈现出自己设置好的窗口布局&#xff…...

【开源】基于JAVA+Vue+SpringBoot的实验室耗材管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 耗材档案模块2.2 耗材入库模块2.3 耗材出库模块2.4 耗材申请模块2.5 耗材审核模块 三、系统展示四、核心代码4.1 查询耗材品类4.2 查询资产出库清单4.3 资产出库4.4 查询入库单4.5 资产入库 五、免责说明 一、摘要 1.1…...

【ES】--Elasticsearch的分词器详解

目录 一、前言二、分词器原理1、常用分词器2、ik分词器模式3、指定索引的某个字段进行分词测试3.1、采用ts_match_analyzer进行分词3.2、采用standard_analyzer进行分词三、如何调整分词器1、已存在的索引调整分词器2、特别的词语不能被拆开一、前言 最近项目需求,针对客户提…...

【算法】{画决策树 + dfs + 递归 + 回溯 + 剪枝} 解决排列、子集问题(C++)

文章目录 1. 前言2. 算法例题 理解思路、代码46.全排列78.子集 3. 算法题练习1863.找出所有子集的异或总和再求和47.全排列II17.电话号码的字母组合 1. 前言 dfs问题 我们已经学过&#xff0c;对于排列、子集类的问题&#xff0c;一般可以想到暴力枚举&#xff0c;但此类问题用…...

sqlserver 存储过程

在 SQL Server 中&#xff0c;存储过程&#xff08;Stored Procedure&#xff09;是一种预编译的 SQL 代码块&#xff0c;可以接受参数&#xff0c;执行一系列 SQL 语句&#xff0c;并返回一个或多个结果集。存储过程可以看作是一种封装了 SQL 语句的函数&#xff0c;可以在需要…...

C语言什么是悬空指针?

一、问题 什么是悬空指针&#xff1f;为什么会出现&#xff1f;我们该如何避免悬空指针的出现&#xff1f; 二、解答 在C语言中&#xff0c;悬空指针指的是指向已删除&#xff08;或释放&#xff09;的内存位置的指针。如果一个指针指向的内存被释放&#xff0c;但指针本身并未…...

AES加密后的密码可以破解吗

AES&#xff08;高级加密标准&#xff09;是一种广泛使用的对称加密算法&#xff0c;设计用来抵御各种已知的攻击方法。AES使用固定块大小的加密块和密钥长度&#xff0c;通常是128、192或256位。它被认为是非常安全的&#xff0c;到目前为止&#xff0c;没有已知的可行方法能够…...

vue3学习——路由进度条

安装 pnpm i nprogress创建permission.ts import router from /router/index.ts import NProgress from nprogress import nprogress/nprogress.css // 不加样式不显示 NProgress.configure({ showSpinner: false }) router.beforeEach((to, from, next) > {console.log(t…...

VMware虚拟机安装Windows系统教程

前言 今天给小伙伴分享一个安装Windows系统的教程&#xff0c;本教程适用于WindowsXP/7/8/8.1/10。 安装的系统前需要先检查一下你的电脑硬件环境&#xff0c;每个系统的硬件要求都不一样哦&#xff5e; 硬件要求指的是你的电脑主机的配置&#xff0c;如果低于这个配置的&am…...

vue3学习——router-view 过渡动画

虽然vue3说建vue页面不用包裹一个根节点&#xff0c;但是transition不能没有唯一的标签 所以还是得包一层~ o(&#xffe3;▽&#xffe3;)o <el-main><router-view v-slot"{ Component, route }"><transition name"MainFade" mode"o…...

从HSE攻击事件漫谈针对勒索攻击防御的两大误区

前言 HSE遭到严重的勒索软件攻击&#xff0c;爱尔兰的医疗服务系统是该国的公共资助医疗系统&#xff0c;在受到勒索病毒攻击之后&#xff0c;被迫在上周五关闭其 IT 系统&#xff0c;以此作为预防措施&#xff0c;避免威胁扩散。该事件导致该国家多家医院的服务取消和中断&am…...

设计模式(结构型模式)外观模式

目录 一、简介二、外观模式2.1、子系统2.2、外观类2.3、使用 三、优点与缺点 一、简介 外观模式&#xff08;Facade Pattern&#xff09;是一种结构型设计模式&#xff0c;提供了一个统一的接口&#xff0c;用于访问子系统中的一组接口。这个模式隐藏了子系统的复杂性&#xff…...

C语言函数的栈帧与销毁(面试亮点)

目录 如果你能熟练的掌握函数的栈帧与销毁在面试中是及其亮眼的加分项&#xff0c;所以我们来以实例来将解函数是如何实现栈帧与销毁的。 一. 函数栈帧 二.寄存器 三. 用例题讲解创建栈帧的过程 3.1 main 函数的反汇编代码。 第一步&#xff1a;给调用main函数的函数分配…...

使用 GreenSock(GSAP)实现 字符串动画

要使用 GreenSock&#xff08;GSAP&#xff09;实现 "JianMa XinXi" 这个字符串的动画&#xff0c;其中两个 x 字符自动旋转&#xff0c;j 和 m 字符上下跳动&#xff0c;并且美化这个字符串使其可以作为 logo 使用&#xff0c;我们可以通过以下步骤来实现&#xff1…...

linux系统zabbix监控服务端部署

zabbix服务端部署 zabbix服务端部署安装mysql创建初始数据库为Zabbix server配置数据库为Zabbix前端配置PHP启动Zabbix server和agent进程浏览器访问ipConfigure DB connection页面Zabbix server details页面登录账户名密码 zabbix 官网www.zabbix.com服务端部署 rpm -Uvh ht…...

算法----回溯(附录---剪枝)

回溯相信大家都已经了解了所以这章我将见但介绍下回溯剪枝 为什要剪枝 在《算法----回溯&#xff08;正文&#xff09;》中我提到过回溯就是暴力&#xff0c;为什么那些题能过&#xff0c;因为数据范围小 那如果数据范围大了&#xff0c;就不行了&#xff0c;这时剪枝的作用就…...

从Unity到Three.js(模型文件加载)

模型加载功能探索&#xff0c;用blender导出了个glb格式的cube进行的测试。 初接触js语法&#xff0c;回调注册的地方直接使用匿名函数总感觉脑子跟不上&#xff0c;反应不过来&#xff0c;就把加载后的回调简单封装了下&#xff0c; 官方文档是直接使用的匿名函数。 另外看官方…...