C语言指针总结(完结篇)

前言

这篇博客终于迎来了指针博客的大结局,本篇主要分析习题来回顾之前的指针总结的知识点,这篇博客的题有点绕,哈哈算是经典了

个人主页:小张同学zkf

若有问题 评论区见

感兴趣就关注一下吧

4ae1d57ce93742f3b48962852326a326.jpeg


目录

1. sizeof和strlen的对比

1.1 sizeof

1.2 strlen

1.3 sizeof和strlen的对比

2. 数组和指针笔试题解析

2.1 一维数组

2.2 字符数组

2.3 二维数组

3. 指针运算笔试题解析

3.1 题目1

3.2 题目2

3.3 题目3


1. sizeof和strlen的对比

1.1 sizeof

我们在做指针习题前,再次认识下sizeof()和strlen,很多人分不清,其实这两区别特别大,sizeof 计算变量所占内存内存空间大小的,单位是字节,如果操作数是类型的话,计算的是使用类型创建的变量所占内存空间的大小。

sizeof 只关注占用内存空间的大小,不在乎内存中存放什么数据。

1.2 strlen

strlen 是C语言库函数,功能是求字符串长度。函数原型如下:

size_t strlen ( const char * str );

统计的是从 strlen 函数的参数 str 中这个地址开始向后, \0 之前字符串中字符的个数。
strlen 函数会一直向后找 \0 字符,直到找到为止,所以可能存在越界查找。

1.3 sizeof和strlen的对比

8606dcadff7d470bab03ffce3c2ae3e8.png


2. 数组和指针笔试题解析

以下所有题牢记两个结论:

sizeof(数组名)这里的数组名代表着整个数组的大小(sizeof里只有一个数组名!!!)

&数组名 这里的数组名表示取整个数组的地址

其他数组名出现都代表首元素地址!!!!!!

2.1 一维数组

int a[] = {1,2,3,4};
printf("%d\n",sizeof(a));
printf("%d\n",sizeof(a+0));
printf("%d\n",sizeof(*a));
printf("%d\n",sizeof(a+1));
printf("%d\n",sizeof(a[1]));
printf("%d\n",sizeof(&a));
printf("%d\n",sizeof(*&a));
printf("%d\n",sizeof(&a+1));
printf("%d\n",sizeof(&a[0]));
printf("%d\n",sizeof(&a[0]+1));

 这里面元素都是int类型,一个元素大小4个字节

我们先看第一个,sizeof(a)代表什么意思那,a是数组名在sizeof里只有一个数组名,此时a代表整个元素,一个元素大小是4,则整个元素的大小就是16个字节

sizeof(a+0)此时不仅仅是数组名一个单独在sizeof里,所以这里的a代表数组首元素的地址,那首元素地址加0还是首元素地址,所以此时sizeof里是个地址,大小为4或8个字节

sizeof(*a)此时不仅仅是数组名一个单独在sizeof里,所以这里的a代表数组首元素的地址,那首元素地址解引用,所以此时sizeof里是第一个元素的大小,大小为4个字节

sizeof(a+1)此时不仅仅是数组名一个单独在sizeof里,所以这里的a代表数组首元素的地址,那首元素地址加1,所以此时sizeof里是第2个元素的地址,大小为4或8个字节

sizeof(a[1])此时不仅仅是数组名一个单独在sizeof里,所以这里的a代表数组首元素的地址,那首元素地址后面跟个数组括号,里面有个1,所以此时sizeof里是第2个元素的大小,大小为4个字节

sizeof(&a)此时不仅仅是数组名一个单独在sizeof里,但是别忘了还有一个结论,&后跟数组名代表取整个数组的地址,那整个数组的地址也是地址呀,所以此时sizeof里是地址大小,大小为4或8个字节

sizeof(*&a)&后跟数组名代表取整个数组的地址,但前面那个*解引用号把地址又解引用了,相当于此时此刻只有一个数组名在sizeof里,那此刻数组名就代表整个数组的大小,所以大小为16个字节

sizeof(&a+1)&后跟数组名代表取整个数组的地址,所以这里取整个数组的地址,那&a+1相当于跳了一个数组大小的地址,所以此时sizeof里是地址的大小,大小为4或8个字节

sizeof(&a[0])此时&后跟数组名,但是这里[]优先级比&高,所以a先与后面的【0】成为数组里第一个元素再对它取地址,那&a【0】相当于首元素地址,所以此时sizeof里是地址的大小,大小为4或8个字节

sizeof(&a[0]+1)根据以上推测第一个地址加一相当于第2个地址,既然是地址,那大小为4或8个字节


2.2 字符数组

char arr[] = {'a','b','c','d','e','f'};
printf("%d\n", sizeof(arr));
printf("%d\n", sizeof(arr+0));
printf("%d\n", sizeof(*arr));
printf("%d\n", sizeof(arr[1]));
printf("%d\n", sizeof(&arr));
printf("%d\n", sizeof(&arr+1));
printf("%d\n", sizeof(&arr[0]+1));

这里是char类型,一个元素大小1个字节

我们先看第一个,sizeof(arr),arr是数组名在sizeof里只有一个数组名,此时arr代表整个元素,一个元素大小是1,则整个元素的大小就是6个字节

sizeof(arr+0),此时不仅仅是数组名一个单独在sizeof里,所以这里的arr代表数组首元素的地址,那首元素地址加0还是首元素地址,所以此时sizeof里是个地址,大小为4或8个字节

sizeof(*arr),此时不仅仅是数组名一个单独在sizeof里,所以这里的arr代表数组首元素的地址,那解引用就是首元素的大小,所以此时sizeof里是个元素大小,大小为1

sizeof(arr[1]),此时不仅仅是数组名一个单独在sizeof里,所以这里的arr代表数组首元素的地址,那首元素地址后面跟个数组括号,里面有个1,所以此时sizeof里是第2个元素的大小,大小为1个字节

sizeof(&arr),&后跟数组名代表取整个数组的地址,所以此时sizeof里是个地址大小,大小为4或8个字节

sizeof(&arr+1),此&后跟数组名代表取整个数组的地址,加一就是跳过一个数组的大小的地址,所以此时sizeof里是个地址大小,大小为4或8个字节

sizeof(&arr【0】+1),&后跟首元素的地址,加一是第2个元素的地址,所以此时sizeof里是个地址大小,大小为4或8个字节


char arr[] = {'a','b','c','d','e','f'};
printf("%d\n", strlen(arr));
printf("%d\n", strlen(arr+0));
printf("%d\n", strlen(*arr));
printf("%d\n", strlen(arr[1]));
printf("%d\n", strlen(&arr));
printf("%d\n", strlen(&arr+1));
printf("%d\n", strlen(&arr[0]+1));

 那如果所有的sizeof换成strlen会是什么样子

strlen(arr)这里的arr代表首元素地址,此时从首元素读取到\0不知道什么时候读取到,所以此时为随机值

strlen(arr+0)这里的arr代表首元素地址,加0依旧是首元素的地址,此时从首元素读取到\0不知道什么时候读取到,所以此时为随机值

strlen(*arr)这里的arr代表首元素地址,解引用是一个字符,字符对应的ASC码值强制转换成地址,是个野指针,所以这里读取错误

strlen(arr【1】)这里的arr代表首元素地址,后面【1】代表第2元素大小,字符对应的ASC码值强制转换成地址,是个野指针,所以读取错误。

strlen(&arr)&后跟数组名代表取整个数组的地址,整个数组的地址也是从首元素开始读取,找到\0结束,所以是随机值。

strlen(&arr+1)跳过一个数组的地址,也是个地址,从这个地址开始读取,到\0结束,所以是个随机值

strlen(&arr【0】+1)跳过一个元素的地址,从这个地址开始读取,到\0结束,所以是个随机值


char arr[] = "abcdef";
printf("%d\n", sizeof(arr));
printf("%d\n", sizeof(arr+0));
printf("%d\n", sizeof(*arr));
printf("%d\n", sizeof(arr[1]));
printf("%d\n", sizeof(&arr));
printf("%d\n", sizeof(&arr+1));
printf("%d\n", sizeof(&arr[0]+1));

来看看字符串

sizeof(arr),arr是数组名在sizeof里只有一个数组名,此时arr代表整个元素,一个元素大小是1,但别忘了字符串结束标志还有一个\0,则整个元素的大小就是7个字节

sizeof(arr+0),此时不仅仅是数组名一个单独在sizeof里,所以这里的arr代表数组首元素的地址,那首元素地址加0还是首元素地址,所以此时sizeof里是个地址,大小为4或8个字节

sizeof(*arr),此时不仅仅是数组名一个单独在sizeof里,所以这里的arr代表数组首元素的地址,那解引用就是首元素大小,所以此时sizeof大小为1个字节

sizeof(arr【1】),此时不仅仅是数组名一个单独在sizeof里,所以这里的arr代表数组首元素的地址,那首元素地址后面跟个数组括号,里面有个1,所以此时sizeof里是第2个元素的大小,所以此时sizeof大小为1个字节

sizeof(&arr),此&后跟数组名代表取整个数组的地址,所以此时sizeof里是个地址大小,大小为4或8个字节

sizeof(&arr+1),此&后跟数组名代表取整个数组的地址,加一就是跳过一个数组的大小的地址,所以此时sizeof里是个地址大小,大小为4或8个字节

sizeof(&arr【0】+1),&后跟首元素的地址,加一是第2个元素的地址,所以此时sizeof里是个地址大小,大小为4或8个字节


char arr[] = "abcdef";
printf("%d\n", strlen(arr));
printf("%d\n", strlen(arr+0));
printf("%d\n", strlen(*arr));
printf("%d\n", strlen(arr[1]));
printf("%d\n", strlen(&arr));
printf("%d\n", strlen(&arr+1));
printf("%d\n", strlen(&arr[0]+1));

字符串数组换成strlen是什么情况那

strlen(arr)这里的arr代表首元素地址,此时从首元素读取到\0就停止,所以此时为6

strlen(arr+0)这里的arr代表首元素地址,加0还是首元素地址,此时从首元素读取到\0就停止,所以此时为6

strlen(*arr)这里的arr代表首元素地址,解引用是一个字符,字符对应的ASC码值强制转换成地址,是个野指针,所以这里读取错误

strlen(arr【1】)这里的arr代表首元素地址,后面【1】代表第2元素大小,字符对应的ASC码值强制转换成地址,是个野指针,所以读取错误。

strlen(&arr)&后跟数组名代表取整个数组的地址,整个数组的地址也是从首元素开始读取,找到\0结束,所以是6。

strlen(&arr+1)跳过一个数组的地址,刚好跳过了字符串的\0,也是个地址,从这个地址开始读取,到\0结束,所以是个随机值

strlen(&arr【0】+1)跳过一个元素的地址,相当于从第二个元素开始读取,到\0结束,所以是5


char *p = "abcdef";
printf("%d\n", sizeof(p));
printf("%d\n", sizeof(p+1));
printf("%d\n", sizeof(*p));
printf("%d\n", sizeof(p[0]));
printf("%d\n", sizeof(&p));
printf("%d\n", sizeof(&p+1));
printf("%d\n", sizeof(&p[0]+1));

当换成指针变量存放字符会是什么结果那

sizeof(p)p是指针变量,指针变量的大小就是4或8个字节

sizeof(p+1)p指针指向的是第一元素指针,+1指向的是第二元素的地址,此刻还是个地址,大小就是4或8个字节

sizeof(*p)p指针指向的是第一元素指针,解引用的是第一个元素的大小,是char类型,大小为1个字节

sizeof(p[0])此时这里面可以把它看成一个数组,因为p指针是首元素的地址,相当于数组名嘛,此刻就是第一个元素的大小,大小为1个字节

sizeof(&p)此时取地址取的是p指针变量这个空间的地址,不是p指向的首元素的地址,相当于char*  *p2=&p二级指针,但此刻存放地址的地址也是地址,大小为4或8个字节

sizeof(&p+1)p指针变量的地址加1还是地址,相当于跳了一个char*指针变量的地址,大小为4或8个字节

sizeof(&p[0]+1)取首元素的地址,再加1,相当于第二个元素的地址,大小为4或8


char *p = "abcdef";
printf("%d\n", strlen(p));
printf("%d\n", strlen(p+1));
printf("%d\n", strlen(*p));
printf("%d\n", strlen(p[0]));
printf("%d\n", strlen(&p));
printf("%d\n", strlen(&p+1));
printf("%d\n", strlen(&p[0]+1));

我们再看看换成strlen

strlen(p),p是首元素的地址,从首元素的地址往后读取到\0结束,长度为6

strlen(p+1),p是首元素的地址,加1是第二个元素地址,从第2个元素的地址往后读取到\0结束,长度为5

strlen(*p),p是首元素的地址,*p是第一个元素的大小,相当于字符对应的ASC码值强制转换为地址,是个野指针,则读取错误

strlen(p【0】),把它看成数组,相当于首元素大小,相当于字符对应的ASC码值强制转换为地址,是个野指针,则读取错误

strlen(&p),p指针变量的地址,相当于把p存放的地址读取到\0结束,但我不知道什么时候结束,所以是随机值

strlen(&p+1),p指针变量的地址,再加一,相当于是从p跳过一个p指针变量的地址,从这个地方把存储的东西读取到\0结束,但我不知道什么时候结束,所以是随机值

strlen(&p【0】+1),相当于首元素地址加一,是从第二个元素地址开始读取,到\0结束,大小为5


2.3 二维数组

int a[3][4] = {0};
printf("%d\n",sizeof(a));
printf("%d\n",sizeof(a[0][0]));
printf("%d\n",sizeof(a[0]));
printf("%d\n",sizeof(a[0]+1));
printf("%d\n",sizeof(*(a[0]+1)));
printf("%d\n",sizeof(a+1));
printf("%d\n",sizeof(*(a+1)));
printf("%d\n",sizeof(&a[0]+1));
printf("%d\n",sizeof(*(&a[0]+1)));
printf("%d\n",sizeof(*a));
printf("%d\n",sizeof(a[3]));

哈哈哈接下来继续上强度,二维数组

b834374c3d4d4d73be6f62c1b3708b85.gif

sizeof(a)a是二维数组的数组名,当数组名单独存在sizeof()里代表的是整个数组的大小,大小为48个字节

sizeof(a【0】【0】)a不是单独存在那就代表是首元素的地址,后面跟一个数组括号里面是0代表第一行数组数组名,再跟一个数组括号里面是个0就代表第一行数组的首元素大小,大小为4个字节

sizeof(a【0】)a不是单独存在那就代表是首元素的地址,后面跟一个数组括号里面是0代表第一行数组数组名,数组名单独存在就代表这是第一行数组大小,大小为16个字节

sizeof(a【0】+1)a不是单独存在那就代表是首元素的地址,后面跟一个数组括号里面是0代表第一行数组数组名,数组名不是单独存在就代表是第一行首元素地址,加1就代表是第二个元素地址,大小为4或8个字节

sizeof(*(a【0】+1))a不是单独存在那就代表是首元素的地址,后面跟一个数组括号里面是0代表第一行数组数组名,数组名不是单独存在就代表是第一行首元素地址,加1就代表是第二个元素地址,再解引用就是第二个元素大小,大小为4字节

sizeof(a+1)a不是单独存在那就代表是首元素的地址,二维数组的首元素地址就是第一行数组的地址,第一行数组的地址加1就是第二行数组的地址,地址大小就为4或8个字节

sizeof(*(a+1))a不是单独存在那就代表是首元素的地址,二维数组的首元素地址就是第一行数组的地址,第一行数组的地址加1就是第二行数组的地址,再解引用,就是第二行数组名,数组名单独存在就代表第二行数组的大小,是16个字节

sizeof(&a[0]+1)a[0]是第一行数组名,取地址就是第一行的地址,再加一就是第二行地址,地址大小为4或8个字节

sizeof(*(&a[0]+1))a[0]是第一行数组名,取地址就是第一行的地址,再加一就是第二行地址,再解引用是第二行数组大小,大小为16个字节

sizeof(*a)a不是单独存在那就代表是首元素的地址,二维数组的首元素地址就是第一行数组的地址,再解引用就是第一行数组名,又因为第一行数组名单独存在,就代表第一行大小,大小为16个字节

sizeof(a【3】)这里肯定有人疑惑,这不是越界了吗,确实越界了,但sizeof里表达式不运算,所以根本不访问指针指向的对象,依旧可以运行,这里就相当于第四行数组名,数组名单独存在,就代表第四行大小,注意,我并不需要去访问它,只需要知道它的类型是int [4],就可以知道它的大小是16个字节


3. 指针运算笔试题解析


3.1 题目1
 

#include <stdio.h>
int main()
{
int a[5] = { 1, 2, 3, 4, 5 };
int *ptr = (int *)(&a + 1);
printf( "%d,%d", *(a + 1), *(ptr - 1));
return 0;
}
//程序的结果是什么?

我们来分析一下,a是首元素地址,加1就是第二个元素的地址,再解引用就是第二个元素,所以第一个答案就是2,ptr是int型指针,&后跟数组名取的是整个数组的地址,加1就是跳了一个数组的地址,注意,此时被强制转换为int*指针,所以再减一,减的是整形大小,相当于现在指向的是第5个元素,再解引用就是第五个元素,所以第二个答案为5


3.2 题目2

 

//在X86环境下
//假设结构体的⼤⼩是20个字节
//程序输出的结果是啥?
struct Test
{
int Num;
char *pcName;
short sDate;
char cha[2];
short sBa[4];
}*p = (struct Test*)0x100000;
int main()
{
printf("%p\n", p + 0x1);
printf("%p\n", (unsigned long)p + 0x1);
printf("%p\n", (unsigned int*)p + 0x1);
return 0;
}

分析第一个,p是结构体类型,加1就是跳了一个结构体类型,一个结构体20个字节,跳了一个就是加20,又因为是16进制数,所以大小为0x100014,但让以地址打印所以去掉符号补零,就是100014前面位置全补零,第二个,此时p强制转换为unsigned long类型,此刻注意它不是指针了,注意,它不是指针了!!是个整型,那加一个整型1就是直接加一,结果就是100001高位补零就行,第三个是整型指针类型,加1就是跳过4个字节,那结果就是100004高位补零就行。


3.3 题目3

 

#include <stdio.h>
int main()
{
int a[3][2] = { (0, 1), (2, 3), (4, 5) };
int *p;
p = a[0];
printf( "%d", p[0]);
return 0;
}
 

此刻首先一定要注意里面是小括号(),不是大括号{},是逗号表达式,返回值是最右边的值,那数组里就三个数,1,3,5,a[0]是第一行数组名,代表第一行首元素地址,用指针p表示,那p[0]就是第一行首元素,结果就是1


OK,指针这块就完全结束了,喜欢的各位可以点赞,对指针还是不懂的朋友可以从我的第一篇指针博客再回顾一下。

c3c704f2f35949209c4609ccffa5e758.gif0d180fd3fd844e32826b2c3c75c775ae.gif

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/436548.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python算法100例-3.6 自守数

1.问题描述2.问题分析3.算法设计4.求给定数的位数5.分离给定数中的最后几位6.确定程序框架7.完整的程序 1&#xff0e;问题描述 自守数是指一个数的平方的尾数等于该数自身的自然数。例如&#xff0c; 5 2 25 &#xff0c; 2 5 2 625 &#xff0c; 7 6 2 5776 &#xff0c…

oss-fuzz-gen:一款基于LLM的模糊测试对象生成与评估框架

关于oss-fuzz-gen oss-fuzz-gen是一款基于LLM的模糊测试对象生成与评估框架&#xff0c;该工具可以帮助广大研究人员使用多种大语言模型&#xff08;LLM&#xff09;生成真实场景中的C/C项目以执行模糊测试。 该工具基于Google的OSS-Fuzz平台实现其功能&#xff0c;并对生成的…

参加美国大学生数学建模大赛,Matlab和Python该怎么选?

经常有小伙伴在数学建模竞赛会问到&#xff0c;MATLAB和Python到底哪个更好&#xff1f;这个问题一直困惑很多同学&#xff0c;今天数乐君来给大家从实用型来综合分析一下&#xff1a; 首先从两者各自的应用做个对比。 一、python的优势 Python相对于Matlab最大的优势&#…

光线追踪11 - Positionable Camera(可定位相机)

相机和介质一样&#xff0c;调试起来很麻烦&#xff0c;所以我总是逐步开发我的相机。首先&#xff0c;我们允许可调节的视野&#xff08;fov&#xff09;。这是渲染图像从一边到另一边的视觉角度。由于我们的图像不是正方形的&#xff0c;水平和垂直的视野是不同的。我总是使用…

初次实战SQL注入

目录 1.判断漏洞是否存在 2.判断注入类型&#xff08;数字型/字符型&#xff09; 3.猜列数 4.联合查询判断回显位 6.获取数据库表明 此实验为本人学习内容&#xff0c;从未攻击任何网站&#xff01;&#xff01;&#xff01;请伙伴们同样遵纪守法&#xff01;&#xff01;…

转录组总结

1. 软件安装 2.转录组分析步骤&#xff1a; ① 建立环境 #建立python2.7的环境&#xff0c;大部分的转录组信息都需要在Python2的环境下进行 conda create -n py2env python2.7 source activate py2env ② 获取fastqc报告 #单个报告 fastqc -t 15 /home/yinwen/biosoft/DN…

2024年数据库系统工程师全套资料

2024年5月数据库系统工程师全套视频、历年真题及解析、历年真题视频解析、教材、模拟题、重点笔记等资料 1、2023年5月、2022年5月、2021年5月数据库系统工程师全套基础精讲视频。2024年5月全套精讲视频持续更新中。 2、数据库系统工程师2004-2023年历年真题及解析文档&#x…

如何在Win系统部署Tomcat服务并实现远程访问内网站点

文章目录 前言1.本地Tomcat网页搭建1.1 Tomcat安装1.2 配置环境变量1.3 环境配置1.4 Tomcat运行测试1.5 Cpolar安装和注册 2.本地网页发布2.1.Cpolar云端设置2.2 Cpolar本地设置 3.公网访问测试4.结语 正文开始前给大家推荐个网站&#xff0c;前些天发现了一个巨牛的人工智能学…

读架构整洁之道的一些感悟

做产品开发时&#xff0c;我们经常跌落在一种无法打破的轮回中。 我们经常说&#xff0c;产品上线最重要&#xff0c;可以未来再重构代码&#xff0c; 但是结果大家都知道&#xff0c;产品上线以后重构工作就再没人提起了。首先&#xff0c;线上跑的好好的&#xff0c;动出问题…

动态规划(算法竞赛、蓝桥杯)--树形DP树的中心

1、B站视频链接&#xff1a;E34 树形DP 树的中心_哔哩哔哩_bilibili #include <bits/stdc.h> using namespace std; const int N20010; int n,a,b,c,ans2e9; struct edge{int v,w;}; vector<edge> e[N]; int d1[N],d2[N],path[N],up[N];//path记录d1 void dfs1(in…

【Vue】sessionStorage存取数据

一. 需求 1.1 模板 Vab Admin Pro 1.2 组件 ElementUI 1.3 阐述 列表页面搜索【关键词】点击【查询】后&#xff0c;点击【查看】按钮跳转到【详情页】&#xff0c;详情页【返回】【保留原搜索关键词】 原图 搜索查询【关键词】 详情 返回后【保留】【搜索查询关键词…

潜水耳机哪个牌子好?认准这几个游泳耳机品牌就对了!

在科技日益发达的今天&#xff0c;人们对于运动设备的需求也在不断提升。作为一项独特的水上运动&#xff0c;潜水爱好者们对耳机的要求也越来越高。一款优秀的潜水耳机不仅能够提供卓越的防水性能和舒适度&#xff0c;还必须具备出色的音质。那么&#xff0c;在众多品牌中&…

2024宠物行业未来发展趋势:京东宠物健康(宠物营养保健和医疗)市场品类数据分析报告

近段时间&#xff0c;广州某知名宠物医院的医疗事故正在被大众热议&#xff0c;也让越来越多从业者开始关心宠物医疗行业的未来形势。 在2022年下半年&#xff0c;京东平台专门设立了一个一级大类目&#xff1a;宠物健康&#xff08;将其从原本的宠物生活类目中独立出来&#…

【C++】c++入门之递归上 数值类

文章目录 前言一、 递归1.1 基本概念1.2 递归的过程1.3 使用场景 二、例题讲解问题一&#xff1a;1002 - 编程求解123...n问题二&#xff1a;1241 - 角谷猜想问题三&#xff1a;1108 - 正整数N转换成一个二进制数问题四&#xff1a;1088 - 求两个数M和N的最大公约数 三、练习问…

Chrome禁止自动升级

一、关闭计划任务 1、首先我们需要右键点击我的电脑&#xff0c;在打开的选项里选择管理。   2、在打开的对话框中选择任务计划程序。   3、在任务计划程序库中找到两个和chrome自动更新相关的任务计划GoogleUpdateTaskMachineCore与GoogleUpdateTaskMachineUA。     4…

onlyOffice-windows 安装说明(二)

onlyoffice windows 安装 onlyoffice 支持多个平台比如&#xff1a;Windows Server、Linux、Docker 以下内容是对官网安装说明做了简单翻译&#xff0c;仅供参考&#xff0c;原文链接地址参见文末。 社区版允许您在本地服务器上安装ONLYOFFICE文档&#xff0c;并将在线编辑器…

【李沐精读系列】BERT精读

论文&#xff1a;BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding 参考&#xff1a;BERT论文逐段精读、李沐精读系列、李宏毅版BERT讲解 一、介绍 BERT(Bidirectional EncoderRepresentation Transformer&#xff0c;双向Transformer编码器…

JAVA 用二分法查找数组中是否存在某个值

二分法查找的概念 二分查找也称折半查找&#xff08;Binary Search&#xff09;&#xff0c;它是一种效率较高的查找方法。首先&#xff0c;将表中间位置记录的关键字与查找关键字比较&#xff0c;如果两者相等&#xff0c;则查找成功&#xff1b;否则利用中间位置记录将表分成…

pinia报错does not provide an export named ‘hasInjectionContext

你们好&#xff0c;我是金金金。 场景 我这里是uniappvue3编写的一个小程序项目&#xff0c;在集成pinia过程当中遇到此问题&#xff0c;报错请求的模块 未提供 导出名hasInjectionContext&#xff08;位于 pinia.mjs:6:10&#xff09; 以下我项目当中vue和pinia的具体依赖版本…

selenium等待机制

selenium等待机制 影响元素加载的外部因素1.计算机的性能2.服务器的性能3.浏览器的性能4.网络因素 强制等待1.强制等待2.页面加载超时机制 隐性等待显性等待1.WebDriverWait类2.WebDriverWait类提供的方法untileuntile_not显性等待的语法格式 3.expected_conditions模块方法exp…