C语言笔试例题_指针专练30题(附答案解析)

news2024/11/27 18:34:07

C语言笔试例题_指针专练30题(附答案解析)


指针一直是C语言的灵魂所在,是掌握C语言的必经之路,收集30道C语言指针题目分享给大家,测试环境位64位ubuntu18.04环境,如有错误,恳请指出,文明讨论!!!

文章目录

  • C语言笔试例题_指针专练30题(附答案解析)
  • 1.笔试例题
  • 2.结果与分析
  • 总结


1.笔试例题

答案与解析在文末尾


1.char * p =“Hello”;是定义初始化指针变量,指针变量的值是一个字符串.说法是否正确

A :正确

B:不正确


2.以下代码printf 输出是什么?

void main (void)
{
    int a[]={4,5,6,7,8};
    int *p = a;
    *p++ += 100;
    printf(" %d %d \n" , *p,*(++p));
}

3.若定义:int a[2][3]={1,3,5,7,9,11},以下描述正确的是

A :*(a+1)为元素7的地址

B:(a[1]+1)的值是5

C:**(a +1)+2值是11

D:a[0]和a不同


4.以下代码printf 输出是什么?

int main()
{
	int a[5] = { 1, 2, 3, 4, 5 };
	int* ptr = (int*)(&a + 1);
	printf("%d,%d", *(a + 1), *(ptr - 1));
 
	return 0;
}

5.说出以下代码的错误之处,并说明原因

char *getmemory( void )
{
	char p[] = "hello world";
	return p;
}

void test( void )
{
	char *str = NULL;
	str = getmemory();
	printf( str );
}

6.在上下文及头文件均正常的情况下,下列代码的输出是?(注:print已经声明过)

main()
{     
    char str[] = "Geneius";
    print (str);
} 
print(char *s)
{
    if(*s)
    {
        print(++s);
        printf("%c", *s); 
    }
}

A :suiene

B:neius

C:run-time error

D:suieneG


7.如下代码是否存在风险,并说明原因和修改方式

#include <stdio.h>
int main () {
	
	//hello world 存放在常量区是不可以修改的
	char * str = "hello world"; 
	*str = 'a'; // error
	
	return 0;
}

8.如下代码是否可行,说明原因

#include <stdio.h>
int main () {
	
	char str[4];
	str = "abc";
	
	return 0;
}

9.如下代码输出是什么

#include <stdio.h>
#include <string.h>

int main(){
    char *str = "baidu.com";
    int i ;
    str = "hello world!";
    int len = strlen(str);
   
    printf("%d \n",len);
    printf("%c \n", *(str+4));
    printf("%s \n",(str+6));
   
    return 0;
}

10.以下程序的输出结果(32位机器上)是()

int main(){
    char *p = "abcdefgh", *r;
    long *q;
    q = (long*)p;
    q++;
    r = (char*)q;
    printf("%s\n", r);
}

A :abcd

B:bcde

C:cdef

D:efgh


11.对于char * pa[7]的描述中,正确的是( )

A :pa是一个指向数组的指针,所指向的数组是7个char型元素

B:pa是一个指向某数组中第7个元素的指针,该元素是char型变量

C:pa[7]表示数组的第7个元素的值,是char型的值

D:pa是一个具有7个元素的指针数组,每个元素是一个char型指针


12.如下代码输出是什么

#include <stdio.h>
void fun(char **p) {
    int i;
    for (i = 0; i < 4; i++)
        printf("%s", p[i]);
}
main() {
    char *s[6] = {"ABCD", "EFGH", "IJKL", "MNOP", "QRST", "UVWX"};
    fun(s);
    printf("\n");
}

A :ABCDEFGHIJKL

B:ABCD

C:AEIM

D:ABCDEFGHIJKLMNOP


13.test.c文件中包括如下语句,文件中定义的四个变量,哪个变量不是指针类型?

#define INT_PTR int*
typedef int* int_ptr;
INT_PTR a,b;
int_ptr c,d;

A :a

B:b

C:c

D:d

E:都是

F:都不是


14.有int s[2]={0,1}, * p=s; 则下列错误的C语句是 ()
A :s+=1;

B:p+=1;

C:*p++;

D:(*p)++;


15.请问下列代码的输出是多少()

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

A :7

B:3

C:8

D:4


16.已知如下代码

int a[] = {1, 2, 3, 4, 5};
int*p[] = {a, a + 1, a + 2, a + 3};
int **q = p;

表达式*(p[0]+1)+**(q+2)的值是____。
A :5

B:6

C:7

D:8

E:9

F:10


17.如下代码输出是什么

#include<stdio.h>
void foobar(int a, int *b, int **c)
{
    int *p = &a;
    *p = 101;
    *c = b;
    b = p;
}
 
int main()
{
    int a = 1;
    int b = 2;
    int c = 3;
    int *p = &c;
    foobar(a, &b, &p);
    printf("a=%d, b=%d, c=%d, *p=%d\n", a, b, c, *p);
    return (0);
}

A :a=1, b=2, c=3, *p=2

B:a=101, b=2, c=3, *p=2

C:a=101, b=101, c=2, *p=3

D:a=1, b=101, c=2, *p=3


18.如下代码输出是什么

void GetMemory(char **p, int num)
{
    *p = (char *)malloc(num);
}
void Test(void)
{
    char *str = NULL;
    GetMemory(&str, 100);
    strcpy(str, "hello");
    printf("%s", str);
}

A :空

B:hello

C:出错


19.如下代码输出是什么

int main(){
   int i = 10;
   int j = 1;
   const int *p1;//(1)
   int const *p2 = &i; //(2)
   p2 = &j;//(3)
   int *const p3 = &i;//(4)
   *p3 = 20;//(5)
   *p2 = 30;//(6)
   p3 = &j;//(7)
return 0;
}

A :1,2,3,4,5,6,7

B:1,3,5,6

C:6,7

D:3,5


20.在C++中,为了建立如图所示的存储结构(即每个结点含两个域,data是数据域,next是指向结点的指针域),则在[] 处应填入选项是(多选题)

struct link
{
char data;
[];
} node;

A :link next;

B:struct link * next;

C:link * next;

D:struct link next;


21.有以下语句:(多选)

char str[4][12] = {"aaa", "bbbb", "ccccc", "dddddd"}, *strp[4];
for (int i = 0; i < 4; i++)
    strp[i] = str[i];

对字符串的正确引用是(),其中0≤k<4()
A :*strp

B:strp

C:str[k]

D:strp[k]


22.在64位系统下,分别定义如下两个变量:char ∗ * p[10]; char( ∗ * p1)[10];请问,sizeof( p p p)和sizeof (p1)分别值为____。

A :4,40

B:80,8

C:10,10

D:8,80


23.若有以下说明和定义,在必要的赋值之后,对fun函数的正确调用语句是()

int fun (int *c){}
int main(){
    int (*a)(int*)=fun,*b(),w[10],c;}

A :a=a(w);

B:(*a)(&c);

C:b=*b(w);

D:fun(b);


24.下列程序的打印结果是?

char p1[15] = "abcd", *p2 = "ABCD", str[50] = "xyz"; 
strcpy(str + 2, strcat(p1 + 2, p2 + 1));
printf("%s", str);

A :xyabcAB

B:abcABz

C:ABabcz

D:xycdBCD


25.对于下面的语句

int c[4][5], (*p)[5];
p = c;

A :p + 1

B:*(p + 3)

C:*(p + 1) + 3

D:*(p[0] + 2)


26.对于以下代码,char ∗ * p=new char[100];说法正确的是()

A :p和new出来的内存都在栈上

B:p和new出来的内存都在堆上

C:p在堆上,new出来的在栈上

D:p在栈上,new出来的在堆上


27.运行以下C语言代码,输出的结果是()

#include <stdio.h>
int main()
{
    char *str[3] ={"stra", "strb", "strc"};
    char *p =str[0];
    int i = 0;
    while(i < 3)
    {
        printf("%s ",p++);
        i++;
    }
    return 0;
} 

A :stra strb strc

B:s t r

C:stra tra ra

D:s s s


28.运行以下C语言代码,输出的结果是()

int main() 
{
    char c, s[20];
    strcpy(s, "Hello,World");
    printf("s[]=%6.9s\n", s);
    return 0;
}

A :s[]=Hello,

B:s[]=Hello,World

C:s[]= Hello,

D:s[]=Hello,Wor


29.有以下语句定义,则能输出a[1][2]的值的语句是()

int a[2][3];
int (*p)[3]=a; 
int *q=*a;

A:cout<< ∗ * ( ∗ * (a+1)+2)

B:cout<<p[1][2];

C:cout<<*(q+5);

D:cout<<q[1][2];


30.若有定义语句: int year=1009 , ∗ * p=&year ;以下不能使变量 year 中的值增至 1010 的语句是()

A:*p+=1;

B:(*p)++;

C:++(*p)

D:*p++


2.结果与分析

题目一:答案:错误 ,
原因:char * p =“Hello” 定义了一个指向字符串的指针变量 p,并将其初始化为字符串 “Hello” 的地址。所以指针变量的值为字符串的地址

题目二:答案:6,6
原因:执行*p++ += 100语句之后,数组变成{104,5,6,7,8},p指针指向第个二元素:5,重点是考察的是变参函数printf,printf的参数入栈是从右到左执行的,所以先执行 ∗ * (++p)输出6,再 执行 ∗ * p输出6,输出的是同一个元素。此题答案之前出现分歧,可能是运行环境不一致导致的。

题目三:答案:A
原因:在二维数组中, ∗ * (a+1)表示第二列首元素地址,这里是7;(a[1]+1)表示第二列第二个元素的地址,这里应该是元素9的地址;**(a +1)表示第二列首元素求值,这里是7,+2得到的是9;a和a[0]其实是一样的。一维数组和二维数组运算关系可参见博客:https://blog.csdn.net/Yin_w/article/details/131731082

题目四:答案:2,5
原因:因为&a是整个数组a的地址,所以&a+1指向的是整个数组a后面的一个位置(跨越了整个数组),也就是ptr指向的是数组a之外的下一个位置。而由于数组a是连续存储的,所以这个位置恰好是数组a最后一个元素的下一个位置。因此 ∗ * (ptr-1)的值就是数组a中最后一个元素的值,即5

题目五:答案:运行结果:运行无误,但打印乱码
原因:getMemory(void)中的p[]为函数内的局部自动变量,在函数返回后,内存已经被释放。如果一步步调试,会发现执行str=getMenory();后str不再是NULL了,但是str的内容并不是hello world,而是垃圾数据。

题目六:答案:A
原因:主要考察递归思想,此题答案来自牛客网码友,鸣谢!
在这里插入图片描述

题目七:答案:运行会报错,
原因:这种形式的字符串存储在常量区。常量区 字符串只有读取权限,没有写入权限,这就导致了字符数组 在定义后可读取和修改每个字符而 第二种形式(字符串常量) 一旦定义后便不可修改,对它的赋值都是错误的(可整体赋值),这种形式可修改:
char str[] = “hello world”;
char *pstr = str;
*str = ‘a’;

题目八:答案:赋值方式错误
原因:字符数组 只有在定义时才可一次性赋值,一旦定义完就只能一个个赋值。这样写正确:str[0] = ‘a’; str[1] = ‘b’; str[2] = ‘c’;与上述第七题的联系和区别,可参见博客:https://blog.csdn.net/Yin_w/article/details/132426333

题目九:
答案:
12
o
world!
原因:字符数组是一个数组,关于指针和数组的规则同样也适用于字符数组.故输出字符串也可以用: ∗ * (pstr+i)、pstr[i]、*(str+i) 、str[i]进行输出

题目十:答案:D
原因:char* p = “abcdefgh”,每个字符占1个字节,那么总共是8个字节,此时p指向’a’。如果是p++,那么p将指向’b’。打印p会得到"bcdefgh"。 long* q = (long*)p 将p强制转换为long*类型,也就是用long类型去解释存储了"abcdefgh"的这一段内存,此时q指向’a’,由于long类型是4个字节,那么q++移动4个字节,q将指向’e’,打印q将得到"efgh"。

题目十一:答案:D
原因,这里定义的是一个指针数组,本质是一个数组,数组元素为指针

题目十二:答案:D
原因:以上语句定义了一个指针数组 s。本质是一个数组,数组元素为字符串指针,而数组名是指向第一个元素的常量指针,因此 s 是指向指针的指针,所以函数 fun 的形参定义是 char **。fun(s) 将指针 s 的值传递给形参 p,所以 p = s,因此for(i=0;i<4;i + + )printf(“% s”,p[i]);中 printf(“% s”,p[i]) 等价于 printf(“% s”,s[i])。注意, s[i] 中存储的不是字符串,而是字符类型的指针,但 printf 会输出 s[i] 存储的指针指向的字符串。所以最后输出为 D。

题目十三:答案:B
原因:typedef 给已有类型声明一个别名,故c和d都是int_ptr类型也即都是int *类型;
#define宏定义,在预编译时直接进行简单替换,即原式变为:int ∗ * a,b; 这相当于是int *a, int b; 即a是指针,b是int型。参考博客:https://blog.csdn.net/Yin_w/article/details/134915018?spm=1001.2014.3001.5502

题目十四:答案:A
原因:数组名为指针常量,其值不可更改。

题目十五:答案:A
原因:int ∗ * p[n] 表示的是指针数组;int ( ∗ * p)[n] 表示的是一个指向有n个元素数组的指针;(int ( ∗ * )[4])m 表示以数组指针重新组织数组m,将其每4位划为一组,这样一来,m为{{1,2,3,4},{5,6,7,8},{9,0, , }},p指向第一行故p[1][2]即 ∗ * ∗ * (p+1)+2),表示第二行第三个元素,为7

题目十六:答案:A
原因:a[]是一个有5个元素的数组, ∗ * p[]是一个指针数组,数组名p,其内部有4个元素,每个元素是一个指针,分别指向a,a+|,a十2,a十3。 ∗ * (p[0]+1)表示数组p的第0行第1个元素的值,即a[l],值为2。 ∗ * ∗ * q是一个二维指针,它是向p的首址,即p[0]+0,即a的首地址,a[0]。q+2表示指向&a的第2个元素,**表示取值3。所以答案5

题目十七:答案:A
原因:函数对a是值传递,所以int *p = &a得到的是形参的地址,不会改变a的实际值,“*p = 101”是把形参a的值变成了101;对**c,传入的是二级指针,所以“ ∗ * c = b”改变了指针p的指向,现在p指针指向b,所以p取值是2,但c的值没有变,依旧是3;对于b =p;相当于改变指针的指向,对于一级指针来讲想在函数内部改变其指向是无效的,所以b的值其实也没变,整个过程下来其实改变的只有p的指向,所以选A。可以参考博客:https://blog.csdn.net/Yin_w/article/details/132478099

题目十八:答案:B
原因:这里对传入的参数是二级指针,但因为该函数形参p为实参的临时拷贝,在函数内部申请空间的地址,存放在p中,不会影响str,所以当函数返回之后,str会成功指向开辟的堆空间,但一定要记得释放,此题有区别于void GetMemory(char *p, int num)形式。

题目十九:答案:C
原因:
(1)const int ∗ * p1:不能通过指针p1修改指向的内存的值,但p1本身指向可修改。
(2)int const ∗ * p2=&i:与p1相同,即不能修改p2指向的内存单元的值,但是可以修改p2使其指向其它的内存单元。这里p2指向了整型变量i
(3)p2=&j:修改p2,使其指向整型变量 j ,由(2)可知(3)没错。
(4)int *constp3=&i:p3是指向整型变量的常指针,p3初始化后不能改变他的指向,但是可以修改p3指向的内存单元的值。
(5)*p3=20:通过p3将变量i的值修改为2,由(4)可知(5)没错。
(6)*p2=30:通过p2修改它所指向的内存单元的值,由(2)可知(6)错误。
(7)p3=&j:修改p3,使其指向j,由(4)可知(7)错误。
参考博客:https://blog.csdn.net/Yin_w/article/details/132394812

题目二十:答案:BC
原因:由链表的属性可知,第二个成员是指向数据储存数据的结构体类型的结构体指针,非常明显BC均符合。

题目二十一:答案:ACD
原因:for循环实现将每个字符串的首地址赋给指针数组中每一个元素。strp为指针数组首地址,不是字符串的引用。str[k]为第k个字符串的地址,表示第k个字符串的引用。strp[k]表示指针数组的第k个元素,为第k个字符串的地址,也是这个字符串的引用。*strp取指针数组第一个元素,即为第一个字符数组的地址,也即为第一个字符串的引用。选择A、C、D选项。

题目二十二:答案:B
原因:64位系统下一个指针占8字节。
(1)char ∗ * p[10]指针数组:array of pointers,即用于存储指针的数组,也就是数组元素都是指针。如int* a[10]。
(2)char( ∗ * p1)[10]数组指针:a pointer to an array,即指向数组的指针。如int (*a)[10]。
sizeof( p p p)计算的是10个char型指针的数组大小,sizeof(p1)计算的是一个char型指针p1的大小,所以答案为80 , 8。

题目二十三:答案:B
原因:int fun (int *c){ … }定义了一个参数为int类型指针的函数。int ( ∗ * a)(int ∗ * )=fun的意思是定义了一个函数指针,该指针指向了fun函数,所以可以通过对指针取值调用该函数,且函数的参数必须是个地址,只有B符合,注意调用函数指针有ret = (*p)(); 和ret = p(); 两种形式,参见博客:https://blog.csdn.net/Yin_w/article/details/129962775

题目二十四:答案:D
原因:本题考查数组和指针,在本题中c是二维数组,指针p指向二维数组c,p其实是指向c数组的第一行。因此选项A)中p+1指向c数组的第二行;选项B)中,p+3表示p指向c数组的第三行,因此 ∗ * (p+3)表示取出c数组第三行首元素的地址:选项C)和选项B)类似,表示取出数组c第二行首元素地址然后加3;选项D)中p[0]+2表示数组第一行第三列元素的地址,因此 ∗ * (p[0]+2)是取出该元素的值。 知识模块:函数和数组

题目二十五:答案:D
原因:动态分配在堆中,其它的内存分配都在栈上进行。

题目二十六:答案:B
原因:p是char ∗ * 类型,每次++,后移一位(char)
char ∗ * p=str[0]相当于char ∗ * p=“stra”,p先指向s,p++后,指向t,printf输出遇到空字符停止

题目二十七:答案:C
由链表的属性可知,第二个成员是指向数据储存数据的结构体类型的结构体指针,非常明显BC均符合。

题目二十八:答案:C
原因:%6.9s 表示显示一个长度不小于6且不大于9的字符串。若大于9, 则第9个字符以后的内容将被删除。%m.n表示场宽为m的浮点数, 其中小数位为n, 整数位为m-n-1,小数点占1位,不够m位,左右对齐。

题目二十九:答案:ABC
原因:由链表的属性可知,第二个成员是指向数据储存数据的结构体类型的结构体指针,非常明显BC均符合。

题目三十:答案:D
分析·: ∗ * p++是先取出 ∗ * p的值,然后让p++ ,( ∗ * p)++是先取出*p的值,让这个值++,*p+=1也是先取值再让值++ 参考博客https://blog.csdn.net/Yin_w/article/details/132495312


总结

以上就是30道C语言指针测试题目,如有错误,恳请指出,收集不易,转载留名,谢谢!!!

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

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

相关文章

OpenGLES:glReadPixels()获取相机GLSurfaceView预览数据并保存

Android现行的Camera API2机制可以通过onImageAvailable(ImageReader reader)回调从底层获取到Jpeg、Yuv和Raw三种格式的Image&#xff0c;然后通过保存Image实现拍照功能&#xff0c;但是却并没有Api能直接在上层直接拿到实时预览的数据。 Android Camera预览的实现是上层下发…

飞天使-linux操作的一些技巧与知识点

命令行光标移动到行首行尾 ctrl a 跳到首 ctrl e 跳到尾/etc/passwd rpm 包格式 RPM&#xff08;Red Hat Package Manager&#xff09;是一种常用的Linux软件包管理系统&#xff0c;它使用特定的命名规则来标识和命名软件包。RPM包的名称格式通常遵循以下规则&#xff1a;…

angular route guards

它的作用 有5种guard 1.先创建一个services的typescript class 这个sivices 实现了 canActive 这个interface &#xff08;接口&#xff09; 返回true可以继续执行&#xff0c; 返回false中断执行 2. 在app.module的providers中使用这个services 3.最后在路由文件中使用 路…

一张图解释maxHistory、fileNamePattern、totalSizeCap、maxFileSize之间的关系

文中结合配置和坐标轴的关系进行案例讲解&#xff0c;文中知识针对每个案例情况进行解释&#xff0c;当然也存在其他案例&#xff0c;对比理解即可。 配置案例 <rollingPolicy class"ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><fileNam…

配电房无人值守管理系统

配电房无人值守管理系统是一种基于物联网、云计算、大数据等技术的智能化管理系统&#xff0c;依托电易云-智慧电力物联网&#xff0c;旨在实现对配电房的远程实时监控、自动化运行、故障预警和处理等功能&#xff0c;从而实现配电房的无人值守。 实时监测&#xff1a;通过安装…

MATLAB | 官方举办的动图绘制大赛 | 第四周(收官周)赛情回顾

MATHWORKS官方举办的迷你黑客大赛第三期(MATLAB Flipbook Mini Hack)圆满结束&#xff0c;虽然我的水平和很多大佬还有比较大的差距&#xff0c;但所有奖也算是拿满了&#xff1a; 专家评选前三名&#xff0c;以及投票榜前十&#xff1a;~ 每周的阶段性获奖者&#xff1a; 下面…

深入了解Python pydash库

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 在数据处理和分析领域&#xff0c;Python一直是一种强大的编程语言。然而&#xff0c;在处理大规模数据集和执行复杂操作时&#xff0c;有时候需要更高效的工具。在本文中&#xff0c;我们将深入探讨pydash库&am…

Docker | 使用Dockerfile制作镜像

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏:Docker系列 ✨特色专栏: MySQL学习 🥭本文内容: DDocker | 使用Dockerfile制作镜像 📚个人知识库: 知识库,欢迎大家访问 1.前言 大家…

Python字典去重竟然比集合去重快速40多倍

这里写目录标题 对比代码结果图代码解析 对比代码 from glob import glob from tqdm import tqdm import time path_listglob("E:/sky_150b/任务组_20231207_2023/*.jsonl") # for two in tqdm(path_list): onepath_list[0]with open(one,"r",encoding&q…

第 9 部分 — 内存增强 Transformer 网络:数学见解

一、说明 在顺序数据处理领域&#xff0c;传统的 Transformer 架构擅长处理短期依赖性&#xff0c;但在需要大量内存和长序列上下文保留的任务中表现不佳。在这篇综合博客中&#xff0c;我打算探索一种新颖的混合方法&#xff0c;将 Transformer 与显式长期记忆模块集成在一起。…

viple模拟器使用(五):Web 2D模拟器中实现两距离局部最优迷宫算法

关于两距离局部最优迷宫算法的原理本文不再赘述&#xff0c;详情请参考&#xff1a;viple模拟器使用&#xff08;四&#xff09;&#xff0c;归纳总结为&#xff1a; 前方有路&#xff0c;则直行&#xff1b; 前方无路&#xff0c;则右转90度&#xff0c;标记右转完成&#xff…

【js】js实现多个视频连续播放:

文章目录 一、效果&#xff1a;二、实现&#xff1a;三、案例&#xff1a; 一、效果&#xff1a; 二、实现&#xff1a; <!DOCTYPE html> <html> <head><title>Video Player</title><style>#progressBar { width: 800px;height: 20px;b…

Botton进一步了解(点击事件)

点击事件和长按事件 监听器&#xff1a;专门监听控件的动作行为。只有控件发生了指定的动作&#xff0c;监听器才会触发开关区执行对应的代码逻辑。按钮控件有两种常用的监听器&#xff1a; 点击监听器&#xff1a;通过setOnClickListener方法设置。按钮被按住少于500ms时会触…

集合的基本内容以及迭代器的介绍

在我们java中我们存储数据的方式&#xff0c;在我们之前学习中数组是可以存储我们的数据的&#xff0c;但是数组存储数据有一些弊端&#xff0c;灵活性不强&#xff0c;存储数据类型有限&#xff0c;灵活性不强这一点主要是体现在两个方面&#xff1a;一方面数组的长度是自定义…

【数据结构】——排序篇(下)

前言&#xff1a;前面我们的排序已经详细的讲解了一系列的方法&#xff0c;那么我们现在久之后一个归并排序了&#xff0c;所以我们现在就来讲解一下归并排序。 归并排序&#xff1a; 归并排序&#xff08;MERGE-SORT&#xff09;是建立在归并操作上的一种有效的排序算法,该算法…

springboot集成knife4j详细教程

使用原生的swagger作为接口文档&#xff0c;功能不够强大&#xff0c;并且默认的ui比较简陋&#xff0c;不符合大众审美。所以实际开发中推荐使用knife4j对swagger进行增强。knife4j的地址&#xff1a;https://gitee.com/xiaoym/knife4j 基本使用 想要使用knife4j非常简单&…

MyBatis 四大核心组件之 ResultSetHandler 源码解析

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall &#x1f343; vue3-element-admin &#x1f343; youlai-boot &#x1f33a; 仓库主页&#xff1a; Gitee &#x1f4ab; Github &#x1f4ab; GitCode &#x1f496; 欢迎点赞…

【Linux】 通过宝塔面板重置SSH密码,无需原密码

目录 应用场景&#xff1a; 步骤一&#xff1a;登录面板 步骤二&#xff1a;安装linux工具箱 步骤三&#xff1a;点击设置 步骤总结&#xff1a; 应用场景&#xff1a; 忘记ssh密码&#xff08;前提要有宝塔的账号密码&#xff09;修改重置ssh密码 步骤一&#xff1a;登录…

LVGL | Demo实例使用说明

LVGL | Demo实例使用说明 时间&#xff1a;2023年12月10日21:51:17 文章目录 LVGL | Demo实例使用说明Demos for LVGLAdd the examples to your projectsDemosWidgetsMusic playerKeypad and encoderBenchmarkStress Contributing Demos for LVGL Add the examples to your p…