【C进阶】指针和数组笔试题解析

news2024/12/24 2:50:09

做题之前我们先来回顾一下

对于数组名的理解:除了以下两种情况,数组名表示的都是数组首元素的地址

(1)sizeof(数组名):这里的数组名表示整个数组

(2)&(数组名) :这里的数组名也表示整个数组

一、一维数组

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));

【运行结果】:(32位环境下)

【分析】:

(1)printf("%d\n", sizeof(a));

 数组名单独放在sizeof内部,数组名表示整个数组;

计算的就是整个数组的大小;

也就是4(4个元素)*4(每个元素都是int类型,占四个字节)=16字节

(2)printf("%d\n",sizeof(a+0));

a没有单独放在sizeof内部,也没有&,则数组名表示数组首元素的地址;

+0还是首元素的地址,也就是计算数组首元素地址的大小;

是地址大小就是4/8个字节(32位机器是4个字节,64位是8个字节)

(3)printf("%d\n", sizeof(*a));

a没有单独放在sizeof内部,也没有&,则数组名表示数组首元素的地址;

*数组首元素的地址,得到的也就是数组首元素:1;

因为数组类型为int类型,那么就是4个字节

总结*a==*(a+0)==a【0】

(4)printf("%d\n", sizeof(a + 1));

a没有单独放在sizeof内部,也没有&,则数组名表示数组首元素的地址;

a+1也就是首元素地址+1,得到的是第二个元素的地址;

是地址大小就是4/8个字节(32位机器是4个字节,64位是8个字节);

总结:a+1==&a【1】

(5)printf("%d\n", sizeof(a[1]));

 a【1】就是数组第二个元素,也就是2

也就是计算数组第二个元素的大小,int类型也就是4个字节

(6)printf("%d\n", sizeof(&a));

 a单独和&一起,a表示的就是整个数组的大小;

&a取出整个数组的地址;

是地址大小就是4/8个字节(32位机器是4个字节,64位是8个字节)

【注意】:

这里的&a(整个数组的地址)a(数组首元素的地址)区别在于类型,而非大小

a:类型为int *                                                       int  *p=a;

&a:类型为int (*)【4】(数组指针)               int   (*p)【4】=&a;

(7)printf("%d\n", sizeof(*&a));

两种理解方法:

<1>&和*相互抵消,sizeof(*(&a))==sizeof(a),所以就和第一个一样

<2>数组指针解引用理解

首先&a是数组的地址,类型为int(*)【4】(数组指针)

然后再解引用,访问的就是4个int的数组

(8)printf("%d\n", sizeof(&a + 1));

 a单独和&一起,a表示的就是整个数组的大小;

地址+1跳过整个数组,但是还是地址,也就是4/8个字节

(9)printf("%d\n", sizeof(&a[0]));

&a【0】就是取出第一个元素的地址,是地址就是4/8个字节

(10)printf("%d\n", sizeof(&a[0] + 1));

第一个元素的地址+1,也就是第二个元素的地址,是地址就是4/8个字节

总结:表示第二个元素的地址:&a【1】==&a【0】+1==a+1


二、字符数组

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));

【运行结果】:(32位环境下)

【分析】:

(1)printf("%d\n", sizeof(arr));

 数组名单独放在sizeof内部,数组名表示整个数组;

计算的就是整个数组的大小;

也就是6(6个元素)*1(每个元素都是char类型,占一个字节)=6字节

(2)printf("%d\n", sizeof(arr + 0));

a没有单独放在sizeof内部,也没有&,则数组名表示数组首元素的地址;

+0还是首元素的地址,也就是计算数组首元素地址的大小;

是地址大小就是4/8个字节(32位机器是4个字节,64位是8个字节)

虽然这里是char类型,但是是指针就是4/8个字节

不要在门缝里看指针,把指针看扁了

(3)printf("%d\n", sizeof(*arr));

a没有单独放在sizeof内部,也没有&,则数组名表示数组首元素的地址;

*数组首元素的地址,得到的也就是数组首元素:‘a’;

因为数组类型为char类型,那么就是1个字节

(4)printf("%d\n", sizeof(arr[1]);

 a【1】就是数组第二个元素,也就是'b'

也就是计算数组第二个元素的大小,char类型也就是1个字节

(5)printf("%d\n", sizeof(&arr));

 a单独和&一起,a表示的就是整个数组的大小;

&a取出整个数组的地址;

是地址大小就是4/8个字节(32位机器是4个字节,64位是8个字节)

(6)printf("%d\n", sizeof(&arr + 1));

 a单独和&一起,a表示的就是整个数组的大小;

地址+1跳过整个数组,但是还是地址,也就是4/8个字节

(7)printf("%d\n", sizeof(&arr[0] + 1));

 第一个元素的地址+1,也就是第二个元素的地址,是地址就是4/8个字节


把sizeof改为strlen再来看看结果

首先回顾一下strlen函数:

它是用来求字符串的长度的,统计的是\0之前的字符个数

size_t strlen( const char *string ); (它的参数是指针,也就是个地址)

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));

【运行结果】:

随机值(但是>=6)

随机值(但是>=6)

err

err

随机值(但是>=6)

随机值

随机值

【分析】:

(1)printf("%d\n", strlen(arr));

没有sizeof,也没与&,此时的arr表示数组首元素的地址

因为后面’\0‘位置不可知,所以只能是随机值

但是这个随机值>=6,这个6就是前面6个字符

(2)printf("%d\n", strlen(arr + 0));

 没有sizeof,也没与&,此时的arr表示数组首元素的地址

+0还是数组首元素的地址,所以就跟上题一样

(3)printf("%d\n", strlen(*arr));

没有sizeof,也没与&,此时的arr表示数组首元素的地址

那么*arr就是首元素,也就是字符’a'

strlen的参数应该是个地址,但是却传了97(也就是字符'a'的ACSII值)

站在strlen的角度,认为传参进去的‘a'——97就是地址,

但是97这个地址不属于自己,不能直接进行*,如果*就是非法访问

(4)printf("%d\n", strlen(arr[1]));

 arr【1】就是第二个元素,也就是字符‘b'——98,

98作为地址直接访问,属于非法访问,所以也会报错

(5)printf("%d\n", strlen(&arr));

  a单独和&一起,a表示的就是整个数组的大小;

&a类型为char (*) 【6】(数组指针),而strlen的参数类型是const char *

那么就会进行类型转换,数组指针类型转换为const char *类型(类型变化)

虽然类型发生变化,但是值不变,所以还是从第一个值开始找\0,

但是后面’\0‘位置不可知,所以只能是随机值

(6)printf("%d\n", strlen(&arr + 1));

a单独和&一起,a表示的就是整个数组的大小;

+1就跳过整个数组,接着向后找\0的位置

但是后面’\0‘位置不可知,所以也是随机值

(7)printf("%d\n", strlen(&arr[0] + 1));

 &arr【0】取出的是第一个元素的地址,+1就是第二个元素的地址

接着从第二个元素的位置向后找\0的位置,

但是后面’\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));

【运行结果】:(32位环境下)

 【分析】:

(1)printf("%d\n", sizeof(arr));

 数组名单独放在sizeof内部,数组名表示整个数组;

计算的就是整个数组的大小;

也就是7(7个元素)*1(每个元素都是char类型,占一个字节)=7字节

注意:这里数组元素直接定义了字符串,那么还有一个看不到的\0

(2)printf("%d\n", sizeof(arr + 0));

a没有单独放在sizeof内部,也没有&,则数组名表示数组首元素的地址;

+0还是首元素的地址,也就是计算数组首元素地址的大小;

是地址大小就是4/8个字节(32位机器是4个字节,64位是8个字节)

虽然这里是char类型,但是是指针就是4/8个字节

(3)printf("%d\n", sizeof(*arr));

 a没有单独放在sizeof内部,也没有&,则数组名表示数组首元素的地址;

*数组首元素的地址,得到的也就是数组首元素:‘a’;

因为数组类型为char类型,那么就是1个字节

(4)printf("%d\n", sizeof(arr[1]));

 a【1】就是数组第二个元素,也就是'b'

也就是计算数组第二个元素的大小,char类型也就是1个字节

(5)printf("%d\n", sizeof(&arr));

 a单独和&一起,a表示的就是整个数组的大小;

&a取出整个数组的地址;

是地址大小就是4/8个字节(32位机器是4个字节,64位是8个字节)

(6)printf("%d\n", sizeof(&arr + 1));

 a单独和&一起,a表示的就是整个数组的大小;

地址+1跳过整个数组,但是还是地址,也就是4/8个字节

(7)printf("%d\n", sizeof(&arr[0] + 1));

 第一个元素的地址+1,也就是第二个元素的地址,是地址就是4/8个字节


 把sizeof改为strlen再来看看结果:

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));

【运行结果】:

6

6

err

err

6

随机值

5

  【分析】:

(1)printf("%d\n", strlen(arr));

 没有sizeof,也没与&,此时的arr表示数组首元素的地址

统计\0之前的字符个数,也就是6个

(2)printf("%d\n", strlen(arr + 0));

  没有sizeof,也没与&,此时的arr表示数组首元素的地址

+0还是数组首元素的地址,所以就跟上题一样

(3)printf("%d\n", strlen(*arr));

 没有sizeof,也没与&,此时的arr表示数组首元素的地址

那么*arr就是首元素,也就是字符’a'

strlen的参数应该是个地址,但是却传了97(也就是字符'a'的ACSII值)

站在strlen的角度,认为传参进去的‘a'——97就是地址,

但是97这个地址不属于自己,不能直接进行*,如果*就是非法访问

(4)printf("%d\n", strlen(arr[1]));

arr【1】就是第二个元素,也就是字符‘b'——98,

98作为地址直接访问,属于非法访问,所以也会报错

(5)printf("%d\n", strlen(&arr));

 a单独和&一起,a表示的就是整个数组的大小;

&a类型为char (*) 【6】(数组指针),而strlen的参数类型是const char *

那么就会进行类型转换,数组指针类型转换为const char *类型(类型变化)

虽然类型发生变化,但是值不变,所以还是从第一个值开始找\0,

统计\0之前的字符个数,也就是6个

(6)printf("%d\n", strlen(&arr + 1));

 a单独和&一起,a表示的就是整个数组的大小;

+1就跳过整个数组,接着从\0后面开始向后找\0的位置

但是后面’\0‘位置不可知,所以也是随机值

(7)printf("%d\n", strlen(&arr[0] + 1));

 &arr【0】取出的是第一个元素的地址,+1就是第二个元素的地址

接着从第二个元素的位置向后找\0的位置,

统计\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));

【运行结果】:

 【分析】:

指针变量p放的只是字符串的首地址,也就是字符’a‘的地址

(1)printf("%d\n", sizeof(p));

 p是指针变量,也就是计算指针变量的大小

是地址大小就是4/8个字节(32位机器是4个字节,64位是8个字节)

(2)printf("%d\n", sizeof(p + 1));

 p是一个char*的指针,+1向后偏移一个字节,也就指向第二个字符'b'的地址

但是它本质还是地址,所以还是4/8个字节

(3)printf("%d\n", sizeof(*p));

 p指向字符a的地址,*p也就是字符’a'(char *的指针,解引用访问一个字节)

字符‘a’的大小也就是1个字节

(4)printf("%d\n", sizeof(p[0]));

 通过p去访问数组,数组名相当于首元素地址,而p指向首元素地址,

p【0】也就是下标为0的元素(可以理解为p就相当于数组名)

p【0】==*(p+0)==*p,也就跟上题一样

(5)printf("%d\n", sizeof(&p));

 &p是二级指针,是p(一级指针变量)的地址,类型是char **

是地址大小就是4/8个字节(32位机器是4个字节,64位是8个字节)

(6)printf("%d\n", sizeof(&p + 1));

 &p是二级指针,是p(一级指针变量)的地址,

+1也就跳过一个char *类型,也就是跳过了p这个指针变量(从它的头部跳到了尾部)

 是地址大小就是4/8个字节(32位机器是4个字节,64位是8个字节)

eg:

int a=10;

int *p=&a;

p+1(p本来指向a变量的头部,+1跳过一个int类型,也就跳过了一个a变量,跳到了a变量的尾部)

int **pp=&p;

pp+1(pp本来指向p指针变量的头部,+1跳过一个int*类型,也就跳过了一个p指针变量,跳到了p指针变量的尾部)

画图理解:

(7)printf("%d\n", sizeof(&p[0] + 1));

p【0】==*p, &*p==p,代表字符串首元素地址,也就是字符a的地址

 p是一个char*的指针,+1向后偏移一个字节,也就指向第二个字符'b'的地址

但是它本质还是地址,所以还是4/8个字节


  把sizeof改为strlen再来看看结果:

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));

 【运行结果】:

6

5

err

err

随机值

随机值

5

  【分析】:

(1)printf("%d\n", strlen(p));

 p指向字符串首字符‘a',从字符a开始向后数,直到\0,长度就为6

(2)printf("%d\n", strlen(p + 1));

  p指向字符串首字符‘a',+1也就指向了第二个字符'b',

从字符b开始向后数,直到\0,长度就为5

(3)printf("%d\n", strlen(*p));

 p指向字符串首字符‘a',解引用也就得到字符a

strlen收到的是97,把这个当作地址,非法访问

(4)printf("%d\n", strlen(p[0]));

p【0】也就是下标为0的元素(可以理解为p就相当于数组名),也就是字符’a‘这个元素

strlen收到的是97,把这个当作地址,非法访问

(5)printf("%d\n", strlen(&p));

 &p是二级指针,指向了p(一级指针变量)的起始地址,类型是char **

在p指针内什么时候遇到\0,是未知的,所以是随机值

(6)printf("%d\n", strlen(&p + 1));

  &p是二级指针,是p(一级指针变量)的地址,

+1也就跳过一个char *类型,也就是跳过了p这个指针变量(从它的头部跳到了尾部)

在p指针后面什么时候遇到\0,是未知的,所以是随机值

(7)printf("%d\n", strlen(&p[0] + 1));

 p【0】就是第一个元素,&p【0】就是第一个元素的地址,

+1得到的就是第二个元素的地址,从第二个元素字符b开始数直到\0,也就是5个字节


首先来回顾一下二维数组: 

1.在二维数组中,数组首元素的地址表示第一行元素的地址

2.二维数组在内存中是连续存放的

3.二维数组其实是一维数组的数组

(a【i】【j】可以将a【i】看作数组名arr,那么也就变为arr【j】)

三、二维数组

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]));

【运行结果】:(32位环境下)

   【分析】:

(1)printf("%d\n", sizeof(a));

数组名单独放在sizeof内部,数组名表示整个数组;

计算的就是整个数组的大小;

也就是3*4(12个元素)*4(每个元素都是int类型,占四个字节)=48字节

(2)printf("%d\n", sizeof(a[0][0]));

 a【0】【0】代表数组的第一个元素

因为数组的类型为int,那么一个int类型元素大小就为4字节

(3)printf("%d\n", sizeof(a[0]));

 a【0】是第一行数组名,数组名单独放在sizeof内部,那么a【0】表示整个第一行数组

也就是4(第一行的四个元素)*4(int类型占4个字节)=16字节

(4)printf("%d\n", sizeof(a[0] + 1));

  a【0】是第一行数组名,没有单独在sizeof内部,也没与&结合,

那么a【0】也就表示数组第一个元素的地址,此时a【0】==a【0】【0】

+1之后就是第二个元素的地址,也就相当于&a【0】【1】

是地址大小就是4/8个字节(32位机器是4个字节,64位是8个字节)

(5)printf("%d\n", sizeof(*(a[0] + 1)));

 从上一题知道,a[0] + 1相当于第二个元素的地址

解引用之后也就是第二个元素,接着求第二个元素的大小

因为数组的类型为int,那么一个int类型元素大小就为4字节

(6)printf("%d\n", sizeof(a + 1));

 a数组名没有单独在sizeof内部,也没与&结合,那么a就代表第一行元素的地址

+1也就是第二行元素的地址,

是地址大小就是4/8个字节(32位机器是4个字节,64位是8个字节)

a的类型为int (*)【4】(数组指针)

(7)printf("%d\n", sizeof(*(a + 1)));

两种理解方式:

1.从上题可以a + 1表示第二行元素的地址,*第二行元素的地址==第二行元素

也就是4(第二行的四个元素)*4(int类型占4个字节)=16字节

2.直接进行转换*(a+1)==a【1】,也就是第二行元素

(8)printf("%d\n", sizeof(&a[0] + 1));

 a【0】是第一行数组名,单独与&结合,a【0】也就表示第一行元素

+1也就是第二行元素的地址,

是地址大小就是4/8个字节(32位机器是4个字节,64位是8个字节)

(9)printf("%d\n", sizeof(*(&a[0] + 1)));

 从上题可知(&a[0] + 1)表示第二行元素的地址,

*第二行元素的地址==第二行元素

也就是4(第二行的四个元素)*4(int类型占4个字节)=16字节

(10)printf("%d\n", sizeof(*a));

  a数组名没有单独在sizeof内部,也没与&结合,那么a就代表第一行元素的地址

*第一行元素的地址==第一行元素

也就是4(第一行的四个元素)*4(int类型占4个字节)=16字节

(11)printf("%d\n", sizeof(a[3]));

 a【3】代表二维数组的第四行,但是没有第四行,那么这是不是就越界了呢?

这里我们就要理解sizeof的内部逻辑:

表达式有两种属性:

1.值属性:2+3=5

2.类型属性:a==int(这里的变量a代表int类型)

eg:sizeof(a),算sizeof(int)就行,不会真的去访问

sizeof不会真的去算a【3】,而是根据类型计算,sizeof看来a【3】就等于a【0】

所以sizeof(a[3])并没有越界

 a【0】是第一行数组名,数组名单独放在sizeof内部,那么a【0】表示整个第一行数组

也就是4(第一行的四个元素)*4(int类型占4个字节)=16字节


本次内容就到此啦,欢迎评论区或者私信交流,觉得笔者写的还可以,或者自己有些许收获的,麻烦铁汁们动动小手,给俺来个一键三连,万分感谢 ! 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Maven3.6.1下载和详细配置

1.下载maven 说明&#xff1a;以下载maven3.6.1为例 1.1网址 Maven – Welcome to Apache Maven 1.2点击下载 1.3点击Maven 3 archives 1.4 点击相应的版本 1.5 点击binaries下载 说明&#xff1a;binaries是二进制的意思 1.6点击zip格式 1.7 蓝奏云获取 说明&#xff1a…

C语言——自定义类型结构体_学习笔记

结构体的基本概念 结构体是一种用户自定义的数据类型&#xff0c;可以包含多个不同类型的变量。通过使用结构体&#xff0c;我们可以将相关联的数据组织在一起&#xff0c;便于管理和使用。 结构体的声明 正常的结构体声明 在C语言中&#xff0c;结构体(struct)指的是一种数…

【SA8295P 源码分析】97 - QNX AIS Camera 框架介绍 及 Camera 工作流程分析

【SA8295P 源码分析】97 - QNX AIS Camera 框架介绍 及 Camera 工作流程分析 一、QNX AIS Server 框架分析二、QNX Hypervisor / Android GVM 方案介绍三、Camera APP 调用流程分析四、QCarCam 状态转换过程介绍五、Camera 加串-解串 硬件链路分析六、摄像头初始化检测过程介绍…

Debian环境下搭建STM32开发环境

1. 安装交叉编译工具&#xff0c;解压gcc-arm-none-eabi-10.3-2021.10-x86_64-linux.tar.bz2&#xff0c;并且把交叉编译环境添加到path路径。 2.安装下载工具驱动和下载工具 # 安装下载工具openocd sudo apt -y install openocd 3.下载测试 sudo openocd -f cmsis-dap.cfg -…

吴恩达ChatGPT《Finetuning Large Language Models》笔记

课程地址&#xff1a;https://learn.deeplearning.ai/finetuning-large-language-models/lesson/1/introduction Introduction 动机&#xff1a;虽然编写提示词&#xff08;Prompt&#xff09;可以让LLM按照指示执行任务&#xff0c;比如提取文本中的关键词&#xff0c;或者对…

postgresql|数据库|centos7下基于postgresql-12的主从复制的pgpool-4.4的部署和使用

前言&#xff1a; postgresql数据库只用自身的一些配置是无法做到最优的优化的&#xff0c;需要通过一些外置插件&#xff08;中间件&#xff09;来提高服务器的整体性能&#xff0c;通俗的说就是数据库仅仅依靠自身是无法达到性能最优的&#xff0c;很多时候需要更改数据库的…

网工证书选择,就业岗位等相关说明

1.网工就业岗位说明。 2.未来职业走向等。 -- 厂商认证 -- HCIE - Datacom HCIE - Secuurity CCIE - EI等等 -- 通信行业 组网 产品 搞技术 - 迭代速度快 -- 厂商&#xff1a; 设计 制造 生产网络设备的公司 - 思科 华为 华三 锐捷等 -- 目的&#xff1a;找…

flink的main方法和execute方法的关系

背景&#xff1a; 执行flink时&#xff0c;我们几种执行模式&#xff0c;比如在IDE本地执行模式以及远程YARN执行的模式等&#xff0c;你是否有疑问&#xff0c;为什么他们可以共用相同的代码呢&#xff1f;其实这就涉及到main方法和execute方法的关系了 flink的main方法和ex…

HUAWEI华为MateBook X Pro 2021款 i7 集显(MACHD-WFE9Q)原装出厂Win10系统20H2

华为笔记本电脑原厂系统自带指纹驱动、显卡驱动、声卡驱动、网卡驱动等所有驱动、出厂主题壁纸、系统属性华为专属LOGO标志、Office办公软件、华为电脑管家等预装程序 链接&#xff1a;https://pan.baidu.com/s/1oeSM0ciwyyRIKms5tR4SNA?pwdo2gq 提取码&#xff1a;o2gq

elasticsearch18-自动补全实战

个人名片&#xff1a; 博主&#xff1a;酒徒ᝰ. 个人简介&#xff1a;沉醉在酒中&#xff0c;借着一股酒劲&#xff0c;去拼搏一个未来。 本篇励志&#xff1a;三人行&#xff0c;必有我师焉。 本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》&#xff0c;SpringCloud…

国家网络安全宣传周知识竞赛活动小程序界面分享

国家网络安全宣传周知识竞赛活动小程序界面分享

解决因为修改SELINUX配置文件出错导致Faild to load SELinux poilcy无法进入CentOS7系统的问题

一、问题 最近学习Kubernetes&#xff0c;需要设置永久关闭SELINUX,结果修改错了一个SELINUX配置参数&#xff0c;关机重新启动后导致无法进入CentOS7系统&#xff0c;卡在启动进度条界面。 二、解决 多次重启后&#xff0c;在启动日志中发现 Faild to load SELinux poilcy…

基于直方图的增强显示

背景 由于需要经常分析浮点型的图像&#xff0c;而浮点型图像经常不能突出显示感兴趣的区域的&#xff0c;如下图所示&#xff1a; 而使用imagej软件&#xff0c;选中一个较小的感兴趣区域&#xff0c;调出其直方图&#xff0c;然后点击设置就可以增强整个图像对比度&#xff…

LabVIEW使用ModbusTCP协议构建分布式测量系统

LabVIEW使用ModbusTCP协议构建分布式测量系统 分布式测量系统主要用于监控远程物体。这种系统允许对系统用户获得的数据进行全面的数据收集、处理、存储和组织访问。它们可能包括许多不同类型的传感器。 在任何具有互联网接入的个人计算机上运行的软件都会发送来自传感器的测…

excel中 将一列数字按照,分割开

excel中 将一列数字按照,分割开 在 Excel 中&#xff0c;你可以使用文本分列功能将一列数字按照逗号分割开。以下是在 Excel 中执行该操作的步骤&#xff1a;1.打开 Excel 并导入包含要分列的数据的工作表。 2.选择要进行分列的列。例如&#xff0c;如果数据位于列 A&#xff…

Python批量统计pdf中“中文”字符的个数

之前的文章提供了批量识别pdf中英文的方法,详见【python爬虫】批量识别pdf中的英文,自动翻译成中文上。以及自动pdf英文转中文文档,详见【python爬虫】批量识别pdf中的英文,自动翻译成中文下。以及Python统计pdf中英文单词的个数。    本文实现Python统计pdf中中文字符的…

Qt/C++音视频开发54-视频监控控件的极致设计

一、前言 跌跌撞撞摸爬滚打一步步迭代完善到今天&#xff0c;这个视频监控控件的设计&#xff0c;在现阶段水平上个人认为是做的最棒的&#xff08;稍微自恋一下&#xff09;&#xff0c;理论上来说应该可以用5年不用推翻重写&#xff0c;推翻重写当然也是程序员爱干的事情&am…

XAPI项目架构:应对第三方签名认证的设计与调整

《XAPI项目》&#xff1a;GitHub仓库&#xff08;勿打&#x1f6ab;小破站一个&#xff09; 该项目是基于鱼皮的《API开发平台》项目的需求和架构设计上进行Golang版本开发的。 这篇文章&#xff0c;主要内容是记录在《XAPI项目》的原架构上&#xff0c;为了应对第三方签名认证…

SpringBoot 的版本、打包、Maven

一、SpringBoot 结构、集成 1.1、集成组件 Spring Core&#xff1a;Spring的核心组件&#xff0c;提供IOC、AOP等基础功能&#xff0c;是Spring全家桶的基础。 Spring Boot&#xff1a;一个基于Spring Framework的快速开发框架&#xff0c;可以快速创建独立的、生产级别的…

chatgpt综述和报告

ChatGPT究竟强在哪&#xff1f;复旦大学邱锡鹏教授《大型语言模型的能力分析与应用》_哔哩哔哩_bilibili2022年底&#xff0c;美国OpenA1公司发布了ChatGPT&#xff0c;一个可以与人类对话交互的千亿规模参数的大型语言模型。它可以根据用户输入的指令完成各种语言相关的任务&a…