【C语言】——指针七:数组和指针试题解析

news2024/11/22 21:29:06

【C语言】——指针七:

前言

  
  在前面的学习中,我们已经对C语言指针的知识有一个较为全面的了解,那么接下来我们做一些练习吧,即是检验我们的学习成果,也是对之前的知识的巩固。
  
  

一、 s i z e o f sizeof sizeof s t r l e n strlen strlen 的对比

1.1、 s i z e o f sizeof sizeof

  
  因为后面的习题大量涉及 s i z e o f sizeof sizeof s t r l e n strlen strlen ,这里我们将简单回顾一下。

  • s i z e o f sizeof sizeof 用于计算类型的大小,单位是字节
  • 括号中可以放置类型也可以放置表达式。他是一个操作符,而非函数,当后面放入的是表达式时,括号可以省略不写(这也侧面验证了 s i z e o f sizeof sizeof 不是函数,你见过函数行参考可以不带括号的吗)
  • s i z e o f sizeof sizeof 只关心他里面的类型,表达式所占用空间的大小,并不进行具体的计算

举例:

#include<stdio.h>
int main()
{
	int a = 10;
	printf("%d\n", sizeof(a));
	printf("%d\n", sizeof a);
	printf("%d\n", sizeof(int));
	return 0;
}

  
  

1.2、 s t r l e n strlen strlen

  
   s t r l e n strlen strlen 是C语言中的库函数,它用来计算字符串的长度

图:

  他的原理是从传递的指针变量开始,从前往后计算字符的个数,知道遇到 ‘\0’ 停止( ‘\0’ 本身不计算)
  
  需要注意的是 s t r l e n strlen strlen 是直到 ‘\0’ 才停止,一直没有 ‘\0’ 则一直计算,因此 s t r l e n strlen strlen 有可能会越界访问
  
  
下面是 s t r l e n strlen strlen模拟实现

#include<stdio.h>
#include<assert.h>

int my_strlen(const char* str)
{
	assert(str);
	const char* p = str;
	while (*(str)++)
	{
		;
	}
	return str - p - 1;
}

  
  
s t r l e n strlen strlen 的应用举例

#include<stdio.h>
int main()
{
	char arr1[] = { 'a','b','c' };
	char arr2[] = "abc";
	printf("%d\n", strlen(arr1));
	printf("%d\n", strlen(arr2));

	printf("%d\n", sizeof(arr1));
	printf("%d\n", sizeof(arr2));

	return 0;
}

  

1.3、 s i z e o f sizeof sizeof s t r l e n strlen strlen 对比

  
s i z e o f sizeof sizeof

  • s i z e o f sizeof sizeof操作符
  • s i z e o f sizeof sizeof 计算操作数所占内存空间的大小,单位是字节
  • s i z e o f sizeof sizeof 不关心内存中存放什么数据

  
s t r l e n strlen strlen

  • s t r l e n strlen strlen 是库函数,使用前需要包含头文件 < s t r i n g . h > <string.h> <string.h>
  • s t r l e n strlen strlen求字符串长度的,统计的是 ‘\0’ 之前字符的个数
  • s t r l e n strlen strlen 关注的是内存中是否有 ‘\0’ ,如果不是 ‘\0’ 就会持续往后找,可能会越界

  
  

二、数组和指针笔试题解析

  

2.1、题组一

	int a[] = { 1,2,3,4,5 };
	
	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));

  
  
答案:

20  4/8  4  4/8  4  4/8  20  4/8  4/8  4/8

  

  • printf("%d\n", sizeof(a)); 数组名单独放在 s i z e o f sizeof sizeof 中,这里的数组名代表整个数组,计算的是整个数组的大小。答案:20
  • printf("%d\n", sizeof(a + 0)); 这里,虽然 s i z e o f sizeof sizeof(a)和 s i z e o f sizeof sizeof(a + 0)的计算结果是一样的,但他们代表的含义并不一样。 s i z e o f sizeof sizeof(a + 0)中,数组名 a a a没有单独放,此时的数组名表示数组首元素的地址,“+0” 地址不变,这里表示的是个指针变量,这个指针指向的是数组首元素。答案:4/8
  • printf("%d\n", sizeof(*a)); 这里数组名表示的是数组首元素的地址,解引用为数组的元素,数组元素类型为 i n t int int。答案:4
  • printf("%d\n", sizeof(a + 1)); 与上面的 s i z e o f ( a + 0 ) sizeof(a + 0) sizeofa+0一样,都是指针变量,只是这里指向的是数组的第二个元素。答案:4/8
  • printf("%d\n", sizeof(a[1])); 这个很简单,即数组第二个元素,类型为 i n t int int,等价于:*(a + 1)
  • printf("%d\n", sizeof(&a)); 指针变量,指向的是整个数组,可访问 20 个字节,虽然是数组指针,但只要是指针,大小就是4/8。答案:4/8
  • printf("%d\n", sizeof(*&a)); 这里,& 和 ∗ * 互相抵消,即 ∗ * &a = a,即 s i z e o f ( a ) sizeof(a) sizeofa)。答案:20
  • printf("%d\n", sizeof(&a + 1)); 这里是指针变量,&a为指向整个数组,+1跳过了整个数组。该指针类型为 i n t int int(*)[ 5 ]。但这里不是野指针,因为 s i z e o f sizeof sizeof 是不会关心访问里面的值的,你不能因为我站在银行门口就说我抢银行吧。答案:4/8
  • printf("%d\n", sizeof(&a[0])); 指针变量,指向数组首元素的指针,为 i n t ∗ int* int 类型。答案:4/8
  • printf("%d\n", sizeof(&a[0] + 1)); 指针变量,直向数组第二个元素的指针,只要是指针变量,为 i n t ∗ int* int 类型。答案:4/8

  
  
  

2.2、题组二

	char arr[] = { 'a','b','c','d','e','f' };

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

  
  
答案:

6  4/8  1  1  4/8  4/8  4/8

  

  • printf("%zd\n", sizeof(arr)); 数组名单独放,表示整个数组。答案:6
  • printf("%zd\n", sizeof(arr + 0)); 数组名没有单独放,后面有“+0”,表示的是指向首元素的指针,指针变量的大小为 4/8。这里不要因为 c h a r char char 类型大小为 1,所以就认为 c h a r ∗ char* char 大小也为 1,只要是指针类型它的大小就是 4/8。答案:4/8
  • printf("%zd\n", sizeof(*arr)); 表示的是数组首元素,类型 c h a r char char。答案:1
  • printf("%zd\n", sizeof(arr[1])); 表示的是数组第二个元素,类型 char,等价于*(arr + 1)。答案:1
  • printf("%zd\n", sizeof(&arr)); 表示的是指向整个数组的指针,指针变量的大小为 4/8,这里,不要以为他是数组类型的指针就以为他是 6,只要是指针类型,它的大小就是 4/8。答案:4/8
  • printf("%zd\n", sizeof(&arr + 1)); 这题与上面一题类似,都是指针变量,+1跳过了整个数组(sizeof不会运算里面的表达式,所以这里不算野指针)。答案:4/8
  • printf("%zd\n", sizeof( & arr[0] + 1)); 字符指针,指向的是数组第二个元素。答案:4/8
      
      
      

2.3、题组三

	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  随机值 - 1

  

  • printf("%d\n", strlen(arr)); 这里 a r r arr arr 表示的是首元素的地址 s t r l e n strlen strlen 函数从首元素开始,往后计数,什么时候遇到 ‘\0’ 什么时候停下,计数停止。答案:随机值
  • printf("%d\n", strlen(arr + 0)); 这一题与上面的是一样的。答案:随机值
  • printf("%d\n", strlen(*arr)); 这里,传给 s t r l e n strlen strlen 函数的是数组首元素,即 ‘a’,字符 ‘a’ 的 ASCII值 为 97。因为 s t r l e n strlen strlen 函数接受的是指针类型的参数,所以 s t r l e n strlen strlen 把 ‘a’ 当做地址 0x00000097,该地址位于操作系统的内核,无法访问。答案:程序无法运行
  • printf("%d\n", strlen(arr[1])); 这一题与上面一题同理,只是这里传的是 ‘b’。答案:程序无法运行
  • printf("%d\n", strlen(&arr)); & a r r arr arr 是指向整个数组的数组指针,虽然类型不同,但数值相同,分析方法与 s t r l e n ( a r r ) strlen(arr) strlenarr一样。答案:随机值
  • printf("%d\n", strlen(&arr + 1)); & a r r arr arr 为数组指针,加一跳过了整个数组,即跳过了 6 个字符,也是与上面一样,直到遇到 ‘\0’ 才停止。答案:随机值 - 6
  • printf("%d\n", strlen(&arr[0] + 1)) 字符指针,指向首元素地址,+1 指向第二个元素,一直往后数,直到 ‘\0’ 。答案:随机值 - 1
      
      
      

2.4、题组四

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

  
  
答案:

7  4/8  1  1  4/8  4/8  4/8

  

  • printf("%d\n", sizeof(arr)); 数组名单独放,表示整个数组的大小,输入的是字符串,后面还跟着 ‘\0’ 。答案:7
  • printf("%d\n", sizeof(arr + 0)); 数组名不是单独放,后面还有一个“+0”,为指向首元素地址的指针。答案:4/8
  • printf("%d\n", sizeof(*arr)); 首元素地址解引用,表示数组首元素类型,类型为 c h a r char char 。答案:1
  • printf("%d\n", sizeof(arr[1])); 表示数组第二个元素,等价于 *(arr + i)。答案:1
  • printf("%d\n", sizeof(&arr)); 数组指针,指向整个数组。答案:4/8
  • printf("%d\n", sizeof(&arr + 1)); 数组指针,+1表 示跳过整个数组,但依然是数组指针类型。答案:4/8
  • printf("%d\n", sizeof(&arr[0] + 1)); 字符指针,指向数组第二个元素。答案:4/8
      
      
      

2.5、题组五

	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  程序无法运行  程序无法运行  6  随机值  5

  

  • printf("%d\n", strlen(arr)); 正常传址, s t r l e n strlen strlen 计算该字符串的大小。答案:6
  • printf("%d\n", strlen(arr + 0)); 与上一题类似, s t r l e n strlen strlen 不会像 s i z e o f sizeof sizeof 那样要区分数组名是否单独存放,对 s t r l e n strlen strlen 来说,数组名只有地址这一个选项。答案:6
  • printf("%d\n", strlen(*arr)); 这道题前面做过类似的,这里传的是 ‘a’, s t r l e n strlen strlen 把‘a’(97)当做地址,但该地址位于操作系统的内核,用户无法访问。答案:程序无法运行
  • printf("%d\n", strlen(arr[1])); 与上面一题类似。答案:程序无法运行
  • printf("%d\n", strlen(&arr)); 传递数组指针,但数值上等于数组首元素地址,从起始位置开始一个个往后计数,直到一段遇到 ‘\0’ 停止。答案:6
  • printf("%d\n", strlen(&arr + 1)); 数组指针,+1 则跳过整个数组,从数组末尾开始计数,什么时候遇到 ‘\0’ 什么时候停下。答案:随机值
  • printf("%d\n", strlen(&arr[0] + 1)); 字符指针,+1 跳过首元素,第二个元素开始往后计数,直到遇到 ‘f‘ 后面的 ‘\0’。答案:5
      
      
      

2.6、题组六

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

  
  
答案:

4/8  4/8  1  1  4/8  4/8  4/8

  

  • printf("%d\n", sizeof(p)); p p p字符指针,大小为 4/8 字节,很简单。答案:4/8
  • printf("%d\n", sizeof(p + 1)); 与上面一样,指针+1 还是指针。答案:4/8
  • printf("%d\n", sizeof(*p)); p p p 本质是存放字符串首元素的地址,即 ‘a’ 的地址, p p p 解引用得到 ‘a’ ,为 c h a r char char 类型,大小为一个字节。答案:1
  • printf("%d\n", sizeof(p[0])); 这一句与上面的是一样的。答案:1
  • printf("%d\n", sizeof(&p)); 取出 p p p 的地址,为二级指针,本质还是指针。答案:4/8
  • printf("%d\n", sizeof(&p + 1)); 二级指针 +1,本质还是指针变量。答案:4/8
  • printf("%d\n", sizeof(&p[0] + 1)); &p[0] + 1 == &*(p + 0) + 1,即 p + 1,还是指针变量。答案:4/8
      
      
      

2.7、题组七

	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  程序无法运行  程序无法运行  随机值  随机值  5

  

  • printf("%d\n", strlen(p));正常传址,正常计算字符串的大小。答案:6
  • printf("%d\n", strlen(p + 1));从第二个字符开始计算字符串的大小。答案:5
  • printf("%d\n", strlen(*p));*p就是‘a’-97。答案:程序无法运行
  • printf("%d\n", strlen(p[0]));p[ 0 ] = *(p + 0) = *p。答案:程序无法运行
  • printf("%d\n", strlen(&p));&p 取出的是 p 这个指针变量的地址,是二级指针与字符串 “abcdef” 的关系就不大了。从 p 这个变量的地址开始往后数,什么时候遇到 ‘\0’ 什么时候停,但这一切都是未知。答案:随机值
  • printf("%d\n", strlen(&p + 1));也是一样的,+1 跳过了 4/8 的字节,但是一切依然是未知的。答案:随机值
  • printf("%d\n", strlen(&p[0] + 1));&p[ 0 ]为取出首个字符的地址,+1即第二个字符的地址。答案:5
      
      
      

2.8、题组八

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

  
  
答案:

48  4  16  4/8  4  4/8  16  4/8  16  16  16

  

  • printf("%d\n", sizeof(a)); 数组名单独放在 s i z e o f sizeof sizeof 中,表示整个数组的大小。答案:48
  • printf("%d\n", sizeof(a[0][0])); 表示的是数组第一行的首元素,类型为 i n t int int 。答案:4
  • printf("%d\n", sizeof(a[0])); a[0] 可看成第一行这个一维数组的数组名,数组名单独放在 s i z e o f sizeof sizeof 中,表示整个数组的大小。答案:16
  • printf("%d\n", sizeof(a[0] + 1)); 第一行的数组名并没有单独放在 s i z e o f sizeof sizeof 中,因此这里的 a[0] 表示的是第一行首元素的地址,+1 则为第二个元素地址,但都是指针变量。答案:4/8
  • printf("%d\n", sizeof(*(a[0] + 1))); a[0] + 1上面已经分析过了,即第一行第二个元素,现在进行解引用,为 i n t int int 类型。答案:4
  • printf("%d\n", sizeof(a + 1)); 数组名不是单独放置,这里的 a a a 表示的是数组首元素的地址,二维数组首元素为第一行,+1指向第二行的地址,但都是指针变量。答案:4/8
  • printf("%d\n", sizeof(*(a + 1))); a + 1上面已经分析过了,即第二行的地址,现在对其解引用,即整个第二行,类型为 i n t int int[ 3 ]。答案:16
  • printf("%d\n", sizeof(&a[0] + 1)); a[0] 为第一行数组的数组名,对其进行 & 操作,取出的是整个第一行数组的地址,+1即指向第二行数组的指针。也可以这样看 &a[0] + 1 = &(*(a + 0)) + 1 = & * a + 1 = a + 1,而 a + 1 前面已经分析过了。答案:4/8
  • printf("%d\n", sizeof(*(&a[0] + 1))); &a[0] + 1 上面刚刚分析过,为指向第二行数组的指针,对其进行解引用,为第二行数组。答案:16
  • printf("%d\n", sizeof(*a)); 这里 a a a 不是单独放,代表首元素的地址,即第一行数组的地址,对其进行解引用,得到第一行数组。答案:16
  • printf("%d\n", sizeof(a[3])); a[3] 与 a[0] 是一样的,因为 s i z e o f sizeof sizeof 并不会对里面的表达式进行实际的匀运算,所以并不算错。答案:16

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

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

相关文章

C++之优化Linux内核结构体用智能指针std::unique_ptr与std::make_unique分配内存总结(二百六十五)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

自贡市第一人民医院:超融合与 SKS 承载 HIS 等核心业务应用,加速国产化与云原生转型

自贡市第一人民医院始建于 1908 年&#xff0c;现已发展成为集医疗、科研、教学、预防、公共卫生应急处置为一体的三级甲等综合公立医院。医院建有“全国综合医院中医药工作示范单位”等 8 个国家级基地&#xff0c;建成高级卒中中心、胸痛中心等 6 个国家级中心。医院日门诊量…

Linux (Ubuntu)- mysql8 部署

1.基本部署 01》》先查看OS类型&#xff0c;如果是Ubuntu在往下边看 rootspray:/etc/mysql/mysql.conf.d# lsb_release -a LSB Version: core-11.1.0ubuntu2-noarch:security-11.1.0ubuntu2-noarch Distributor ID: Ubuntu Description: Ubuntu 20.04.6 LTS Release: …

Movavi Video Converter 2022 for Mac/Win:卓越的视频音频文件转换器

在数字化时代&#xff0c;视频和音频文件已成为我们日常生活和工作中不可或缺的一部分。无论是制作精美的家庭影片&#xff0c;还是编辑专业的商业视频&#xff0c;一款高效、便捷的视频音频文件转换器无疑是您的得力助手。而Movavi Video Converter 2022&#xff0c;就是这样一…

GPT 模型解析:ChatGPT 如何在语言处理领域引领潮流?

人工智能时代来临 我们正处于AI的iPhone时刻。——黄仁勋&#xff08;英伟达CEO&#xff09; ChatGPT 好得有点可怕了&#xff0c;我们距离危险的强人工智能不远了。——马斯克&#xff08;Tesla/SpaceX/Twitter CEO&#xff09; 以上的内容说明我们现在正处于一个技术大翻牌的…

测斜仪在边坡安全监测中的重要作用

边坡作为土木工程和地质工程领域中常见的结构形式&#xff0c;其稳定性直接关系到工程安全以及人民生命财产的安全。因此&#xff0c;对边坡进行精确、及时的监测是至关重要的。在众多边坡监测仪器中&#xff0c;测斜仪以其独特的优势在边坡安全监测中发挥着重要的作用。 测斜仪…

(24年4月2日更新)Linux安装chrome及chromedriver(Ubuntu20.0416.04)

一、安装Chrome 1&#xff09;先执行命令下载chrome&#xff1a; wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb2&#xff09;安装chrome sudo dpkg -i google-chrome-stable_current_amd64.deb踩坑&#xff1a;这里会提示如下报错&…

C刊级 | Matlab实现GWO-BiTCN-BiGRU-Attention灰狼算法优化双向时间卷积双向门控循环单元融合注意力机制多变量回归预测

C刊级 | Matlab实现GWO-BiTCN-BiGRU-Attention灰狼算法优化双向时间卷积双向门控循环单元融合注意力机制多变量回归预测 目录 C刊级 | Matlab实现GWO-BiTCN-BiGRU-Attention灰狼算法优化双向时间卷积双向门控循环单元融合注意力机制多变量回归预测效果一览基本介绍程序设计参考…

大数据实验一,Hadoop安装及使用

目录 一&#xff0e;实验内容 二&#xff0e;实验目的 三&#xff0e;实验过程截图及说明 1、安装SSH&#xff0c;并配置SSH无密码登录 2、配置java环境 3.Hadoop的安装与配置 4、修改四个配置文件&#xff1a; 5、格式化HDFS的NameNode&#xff1a; 6、启动Hadoop 7、…

springcloud基本使用五(Gateway服务网关)

为什么使用网关&#xff1f; 权限控制&#xff1a;网关作为微服务入口&#xff0c;需要校验用户是是否有请求资格&#xff0c;如果没有则进行拦截。 路由和负载均衡&#xff1a;一切请求都必须先经过gateway&#xff0c;但网关不处理业务&#xff0c;而是根据某种规则&#xff…

[NSSRound#8 Basic]MyPage

[NSSRound#8 Basic]MyPage 打开页面后什么都没有 尝试使用php伪协议 //读取文件源码 filephp://filter/readconvert.base64-encode/resourceindex.php 显示&#xff1a;空白一片 filephp://filter/readconvert.base64-encode/resource/var/www/html/index.php 显示&#xff1…

C#.手术麻醉系统源码 手麻系统如何与医院信息系统进行集成?

C#.手术麻醉系统源码 手麻系统如何与医院信息系统进行集成&#xff1f; 手术麻醉系统与医院信息系统的集成是一个关键步骤&#xff0c;它有助于实现信息的共享和流程的协同&#xff0c;从而提高医疗服务的效率和质量。手麻系统与lis、his、pacs等系统的对接是医院信息化建设的重…

00150金融理论与实务考试分析

1.考试时间及题型 2.历年真题分析—单选题 3.历年真题分析—多选题

Redis windows设置自动开启服务

查看服务 WinR后输入services.msc进入到服务管理页面&#xff0c;查看是否存在Redis服务。 Windows版Redis解压后&#xff0c;是不会在服务中显示的&#xff0c;需要手动配置后才能在服务中看到 配置服务 在解压的Redis版本目录下&#xff0c;输入CMD&#xff0c;运行命…

使用阿里云试用Elasticsearch学习:1.1 基础入门——入门实践

阿里云试用一个月&#xff1a;https://help.aliyun.com/search/?kelastic&sceneall&page1 官网试用十五天&#xff1a;https://www.elastic.co/cn/cloud/cloud-trial-overview Elasticsearch中文文档&#xff1a;https://www.elastic.co/guide/cn/elasticsearch/guide…

Python PDF页面设置 -- 旋转页面、调整页面顺序

在将纸质文档扫描成PDF电子文档时&#xff0c;有时可能会出现页面方向翻转或者页面顺序混乱的情况。为了确保更好地浏览和查看PDF文件&#xff0c;本文将分享一个使用Python来旋转PDF页面或者调整PDF页面顺序的解决方案。 目录 使用Python旋转PDF页面 使用Python调整PDF页面…

RISC-V GNU Toolchain 工具链安装问题解决(含 stdio.h 问题解决)

我的安装过程主要参照 riscv-collab/riscv-gnu-toolchain 的官方 Readme 和这位佬的博客&#xff1a;RSIC-V工具链介绍及其安装教程 - 风正豪 &#xff08;大佬的博客写的非常详细&#xff0c;唯一不足就是 sudo make linux -jxx 是全部小写。&#xff09; 工具链前前后后我装了…

Docker、Kubernetes之间的区别

比较容器化工具&#xff1a;了解 Docker、Kubernetes 在应用程序部署和管理方面的差异。 基本概述 Docker 是一个流行的容器化平台&#xff0c;允许开发人员在容器中创建、部署和运行应用程序。 Docker 提供了一组工具和 API&#xff0c;使开发人员能够构建和管理容器化应用程…

C++算法补充---STL

这里写目录标题 CSTL容器字符串函数(string容器函数)字符串转字符 算法交换函数拿到容器或者数组的第一个最大&#xff08;小&#xff09;值元素的下标或者值排序函数求字符数组的有效长度atoi函数&#xff08;将字符串类型的数字转为真正的int型数字&#xff09;string转字符 …

代码随想录算法训练营三刷day42 | 动态规划之背包问题 416. 分割等和子集

三刷day42 416. 分割等和子集确定dp数组以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组 416. 分割等和子集 题目链接 解题思路&#xff1a; 这是一维的背包问题 只有确定了如下四点&#xff0c;才能把01背包问题套到本题上来。 背包的体积为sum / 2背…