整理指针相关练习

news2024/11/15 16:26:22

这里收录的是相关指针的练习,主要针对的是指针与sizeof之间的练习,练完你对指针的理解将更进一层喔

  • 一维数组指针练习
  • 字符数组指针练习
  • 二维数组指针练习
  • 练习总结:
  • 指针笔试真题

一维数组指针练习

一维数组相关练习,下面答案是多少呢,为什么呢?

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 main()
{
	//一维数组
	int a[] = { 1,2,3,4 };
	printf("%d\n", sizeof(a));
	//16
	//a为数组名,但在sizeof(数组名)表示的计算整个数组的大小
	printf("%d\n", sizeof(a + 0));
	//4或8
	//首元素地址
	printf("%d\n", sizeof(*a));
	//4
	//首元素解引用--第一个元素1的大小为4字节
	printf("%d\n", sizeof(a + 1));
	//4或8
	//第二个元素的地址
	printf("%d\n", sizeof(a[1]));
	//4
	//第二个元素2,4字节
	printf("%d\n", sizeof(&a));
	//4或8
	//&数组名表示取出的是整个数组的地址,地址的大小就是4或8
	printf("%d\n", sizeof(*&a));
	//16
	//*和&抵消还是a,sizeof(数组名)表示计算整个数组大小
	printf("%d\n", sizeof(&a + 1));
	//4或8
	//&a取出的是整个地址大小,+1也是加上整个数组地址大小,但地址大小就是4或8
	printf("%d\n", sizeof(&a[0]));
	//4或8
	//a[0]就是   *(a+0)就是第一个元素,然后再取地址,就是首元素地址了
	printf("%d\n", sizeof(&a[0] + 1));
	//4或8
	//第二个地址
	return 0;
}

答案:
在这里插入图片描述

字符数组指针练习

字符数组相关练习,下面答案是多少呢,为什么呢?
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));
	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));

解析:

int main()
{
	char arr[] = { 'a','b','c','d','e','f' };
	printf("%d\n", sizeof(arr));
	//6
	//sizeof(数组名)表示计算的是整个数组大小为6字节
	printf("%d\n", sizeof(arr + 0));
	//4或8
	//这里arr+0表示首元素地址
	printf("%d\n", sizeof(*arr));
	//1
	//这里的arr表示首元素地址,*arr表示第一个元素'a'
	printf("%d\n", sizeof(arr[1]));
	//1
	//表示第二个元素'b'
	printf("%d\n", sizeof(&arr));
	//4或8
	//&arr表示取出的是整个数组地址,但还是地址
	printf("%d\n", sizeof(&arr + 1));
	//4或8
	//&arr表示取出的整个数组大小,+1表示加上整个数组大小地址
	printf("%d\n", sizeof(&arr[0] + 1));
	//4或8
	//第二个元素地址
	printf("%d\n", strlen(arr));
	//这里要注意strlen是专门用来计算字符大小的函数,遇到'\0'停止,而arr这个数组没有\0
	//所以这个为随机值
	printf("%d\n", strlen(arr + 0));
    //无\0,所以为随机值
	printf("%d\n", strlen(*arr));
	//对首元素解引用,访问的是第一个元素,strlen('a')->strlen('97')---非法访问
	//strlen()里面放的应该是一个地址,然后strlen跟着这个地址往后找,找到\0就停止了
	//但这里strlen('a')里放的不是地址,而是97这个数,所以造成非法访问。
	printf("%d\n", strlen(arr[1]));
	//第二个元素strlen('b')->strlen('97')---也是非法访问。
	printf("%d\n", strlen(&arr));
	//&arr表示取出的是整个数组地址,但不知道后面是否有\0,所以还是随机值
	printf("%d\n", strlen(&arr + 1));
	//这里的arr表示首元素地址,&首元素地址,取出一个地址,这个地址指向的是arr首元素地址,再+1呢,也不知道这个地址是啥了
	//还是随机值
	printf("%d\n", strlen(&arr[0] + 1));
	//&arr[0]+1,第二个元素地址,后面无\0,为随机值。

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

解析:

int main()
{
	char arr[] = "abcdef";
	//这里是有\0的
	printf("%d\n", sizeof(arr));
	//7
	//sizeof()计算整个数组大小,\0也算大小而strlen不算\0
	printf("%d\n", sizeof(arr + 0));
	//4或8
	//首元素地址
	printf("%d\n", sizeof(*arr));
	//第一个元素大小 1
	printf("%d\n", sizeof(arr[1]));
	//第二个元素大小 1
	printf("%d\n", sizeof(&arr));
	//&arr取出的是整个数组的地址,还是地址
	printf("%d\n", sizeof(&arr + 1));
	//4或8
	//地址
	printf("%d\n", sizeof(&arr[0] + 1));
	//4或8
	//第二个元素地址
	printf("%d\n", strlen(arr));
	//首元素地址,后面有\0可以停止
	//6
	printf("%d\n", strlen(arr + 0));
	//6
	//首元素地址
	printf("%d\n", strlen(*arr));
	//第一个元素strlen(a)-->strlen(97)
	//非法访问了
	printf("%d\n", strlen(arr[1]));
	//第二个元素
	//非法访问
	printf("%d\n", strlen(&arr));
	//6
	//&arr取出的是整个数组地址,但&arr地址和首元素地址是一样的然后可以找到\0
	printf("%d\n", strlen(&arr + 1));
	//随机值
	//&arr取出的是整个地址,+1,跳过整个数组地址,不知道后面是否有\0
	printf("%d\n", strlen(&arr[0] + 1));
	//第二个元素地址
	//5
	return 0;
	}

3.`

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

解析:

int main()
{
	char* p = "abcdef";
//  p表示字符指针,指向的是首元素的地址
	printf("%d\n", sizeof(p));
	//4或8
	//计算首元素地址大小
	printf("%d\n", sizeof(p + 1));
	//4或8
	//第二个元素地址
	printf("%d\n", sizeof(*p));
	//1
	//第一个元素a
	printf("%d\n", sizeof(p[0]));
	//1
	//第一个元素a
	printf("%d\n", sizeof(&p));
	//4或8
	//&p是二级指针,指向的是a的地址的地址
	printf("%d\n", sizeof(&p + 1));
	//4或8 
	//地址
	printf("%d\n", sizeof(&p[0] + 1));
	//4或8
	//第二个元素的地址
	printf("%d\n", strlen(p));
	//6
	//p表示首元素地址,strlen直达\0停止
	printf("%d\n", strlen(p + 1));
	//5
	//从第二个元素地址开始
	//printf("%d\n", strlen(*p));
	*p表示a
	非法访问了
	//printf("%d\n", strlen(p[0]));
	非法访问
	strlen(a)
	printf("%d\n", strlen(&p));
	//二级指针,指向首元素的地址的地址
	//所以为随机值
	printf("%d\n", strlen(&p + 1));
	//随机值
	printf("%d\n", strlen(&p[0] + 1));
	//第二个元素地址
	//5
	return 0;
}

二维数组指针练习

二维数组相关练习,下面答案是多少呢,为什么呢?

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

解析:

int main()
{
	int a[3][4] = { 0 };
	printf("%d\n", sizeof(a));
	//48
	//sizeof(数组名)表示计算的整个数组大小
	printf("%d\n", sizeof(a[0][0]));
	//4
	//第一行第一个元素大小
	printf("%d\n", sizeof(a[0]));
	//a[0]表示第一行数组名,sizeof(数组名)表示计算的是第一行数组大小
	//16
	printf("%d\n", sizeof(a[0] + 1));
	//a[0]表示第一行数组名,但没有单独放进sizeof()中也没有&,所以表示首元素地址,首元素地址+1表示第二个元素地址
	//4或8
	printf("%d\n", sizeof(*(a[0] + 1)));
	//4
	//(a[0]+1)表示第一行第二个元素地址,解引用访问第二个元素
	printf("%d\n", sizeof(a + 1));
	//a是数组名,表示首元素地址,表示第一行的数组地址,+1表示第二行地址
	//4或8
	printf("%d\n", sizeof(*(a + 1)));
	//16
	//(a+1)表示第二行地址,解引用表示整个第二行元素
	printf("%d\n", sizeof(&a[0] + 1));
	//a[0]表示第一行数组名,&数组名,表示取出的是第一行整个地址,+1跳过整个第一行数组地址大小所以表示第二行地址
	//4或8
	printf("%d\n", sizeof(*(&a[0] + 1)));
	//16
	//第二行数组地址解引用
	printf("%d\n", sizeof(*a));
	//a数组名,没有单独放进sizeof中也没有&,所以表示的是首元素地址,表示第一行地址
	//4或8
	printf("%d\n", sizeof(a[3]));
	//arr[3]表示第四行数组名,单独放进sizeof()内部表示计算整个数组大小
	// a[3]类型是int[4]----sizeof(int[4])  
	// 答案是16,而不是越界访问
	//根据类型来计算大小,不会真实访问内部空间
	//表达式不参与运算,不进行计算
	return 0;
}

练习总结:

  1. sizeof(数组名)表示计算的整个数组大小,数组名单独放进sizeof()才可以
  2. &数组名表示取出的整个数组的地址
  3. 处以上两个情况,其他数组名都表示首元素地址
  4. sizeof()内部不参与运算,不进行真实的空间访问
  5. sizeof() 只关注占用内存空间的大小,单位是字节,不关心内存中放的是什么
  6. strlen是求字符串长度的,统计的是\0之前出现的字符个数,一定要找到\0才能结束,所以可能存在越界访问的可能
  7. sizeof 是操作符 strlen是库函数

指针笔试真题

第一题:考察&数组名表示什么意思

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

结果:在这里插入图片描述
解析:

int main()
{
    int a[5] = { 1, 2, 3, 4, 5 };
    int* ptr = (int*)(&a + 1);
    //ptr是个int*类型的指针,这里的&a表示取出的是整个数组的地址再+1的话,表示跳过整个数组大小的地址
    //(&a+1)的类型是数组指针,然后这里将它强制类型转化成int *类型
    printf("%d,%d", *(a + 1), *(ptr - 1));
    //*(a+1),这里的a表示首元素地址,+1表示第二个元素地址,解引用访问第二个元素,2
    //*(ptr-1),ptr被强制类型转换成int*类型,减1后就访问到最后一个元素的地址了
    return 0;
}

总结:
&数组名表示取出的是整个数组的地址,+1表示跳过整个数组大小。

在这里插入图片描述
第二题:考察指针加1到底加多少?

struct Test
{
 int Num;
 char *pcName;
 short sDate;
 char cha[2];
 short sBa[4];
}*p;
//假设p 的值为0x100000。 如下表表达式的值分别为多少?
//已知,结构体Test类型的变量大小是20个字节
int main()
{
 p = (struct Test*)0x100000;
 printf("%p\n", p + 0x1);
 printf("%p\n", (unsigned long)p + 0x1);
 printf("%p\n", (unsigned int*)p + 0x1);
 return 0;
}

结果:
在这里插入图片描述

解析:

int main()
{
	p = (struct Test*)0x100000;
	printf("%p\n", p + 0x1);
	//p+1取决于指针类型,这个指针是结构体类型大小为20,所以加1就跳过一个结构体大小20
	//16进制的20为14
	//0x100014
	printf("%p\n", (unsigned long)p + 0x1);
	//这里将p强制类型转换成无符号长整形,也就变成了整数了,整数加1就是简单的加减运算
	//0x100001
	printf("%p\n", (unsigned int*)p + 0x1);
	//这里将p强制类型转换成int*类型,所以p+1跳过一个整形大小,也就是4个字节
	//0x100004
	return 0;
}

总结:
指针加+1到底加几呢?
指针加1跳过多少取决于指针类型
整数加一就是加1

第三题:考察指针解引用访问多大空间?

//环境是小段字节序存储,X86
int main()
{
    int a[4] = { 1, 2, 3, 4 };
    int* ptr1 = (int*)(&a + 1);
    int* ptr2 = (int*)((int)a + 1);
    printf("%x,%x", ptr1[-1], *ptr2);
    return 0;
}

结果:
在这里插入图片描述
解析:

int main()
{
    int a[4] = { 1, 2, 3, 4 };
    int* ptr1 = (int*)(&a + 1);
    //&a取出的是整个数组地址,+1跳过整个数组大小,然后又被强制转换成int*类型
    int* ptr2 = (int*)((int)a + 1);
    //a表示首元素地址,强制类型转换成整形,这个地址+1,就是整数+1,然后又被强制转换成int*类型
    printf("%x,%x", ptr1[-1], *ptr2);
    //ptr1[-1]可以这样表示-->   *(ptr-1)
    //对ptr2这个指针解引用,能访问多大空间呢?
    return 0;
}

在这里插入图片描述
在这里插入图片描述
总结:
指针解引用访问多少空间也取决于指针类型,要记住指针解引用是要看访问多少空间的喔,不要忘记啦。

第四题:考察观察,逗号表达式

#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;
}

结果:在这里插入图片描述
解析:

int main()
{
    int a[3][2] = { (0, 1), (2, 3), (4, 5) };
    //注意这个不是将(0,1),(2,3),(4,5)放进数组,括号里是个逗号表达式,最终结果应该是{1,3,5};
    //所以这个二维数组放的是1,3,5,0,0,0
    int* p;
    p = a[0];
    //a[0]表示数组第一行的数组名,没有单独放进sizeof中,也没有&,所以表示首元素地址,放进p里
    printf("%d", p[0]);
    //p[0]表示*(p+0),就是第一个元素 1
    return 0;
}

第五题:考察指针-指针表示什么意思

int main()
{
    int a[5][5];
    int(*p)[4];
    p = a;
    printf("%p,%d\n", &p[4][2] - &a[4][2], &p[4][2] - &a[4][2]);
    return 0;
}

结果:
在这里插入图片描述

解析:
指针-指针表示指针之间的元素个数,由于低地址减去高地址,所以为都为-4,但注意到,第一个是以%p的形式进行打印,是打印地址的,-4在内存中是以补码的形式进行保存,-4的原码反码补码分别是:

 //100000000000000000000000000000100原码
//111111111111111111111111111111011反码
//111111111111111111111111111111100补码
补码直接转换成16进制形式就是

在这里插入图片描述

在这里插入图片描述
总结:指针-指针表示指针之间的元素个数

第6题:不同类型的指针+1表示跳过多少?

int main()
{
    int aa[2][5] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    int* ptr1 = (int*)(&aa + 1);
    int* ptr2 = (int*)(*(aa + 1));
    printf("%d,%d", *(ptr1 - 1), *(ptr2 - 1));
    return 0;
}

结果:
在这里插入图片描述
解析:
上面有题目和这个类似
在这里插入图片描述
第7题:考察pa++,到底指什么意思呢?

int main()
{
	char* a[] = { "work","at","alibaba" };
	char** pa = a;
	pa++;
	printf("%s\n", *pa);
	return 0;
}

结果:
在这里插入图片描述
解析:
在这里插入图片描述
总结:
pa++,其实是pa指向的元素进行++

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

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

相关文章

负载均衡的在线OJ

文章目录1.项目宏观结构(1)三个模块(2)项目宏观结构(3)编写顺序2.compile_server(1)compiler.hpp(2)runner.hpp(3)compile_run.hpp(4)compile_server.cc(5)Makefile(6)temp(7)编译运行模块总结3.comm(1)util.hpp(2)log.hpp(3)httplib.h4.基于MVC结构的OJ服务设计(oj_server)(1)…

java访问控制符/导入2023019

访问控制符&#xff08;定义的时候不加访问控制符&#xff0c;默认的就是default&#xff09;&#xff1a; 1.private&#xff08;当前类访问权限&#xff09;&#xff1a;如果类里的一个成员&#xff08;包括成员变量、方法和构造器等&#xff09;使用private访问控制符来修饰…

Java——数组中第k个最大的元素

题目链接 leetcode在线oj题——数组中第k个最大的元素 题目描述 给定整数数组 nums 和整数 k&#xff0c;请返回数组中第 k 个最大的元素。 请注意&#xff0c;你需要找的是数组排序后的第 k 个最大的元素&#xff0c;而不是第 k 个不同的元素。 你必须设计并实现时间复杂…

Move_base_flex(mbf)框架理解

本文章重点在 第二部分类图解析&#xff0c;第四部分代码解析 文章目录1. move_base_flex主体代码结构树2. move_base_flex 类图解析2.1 ROS2 navigation整体架构2.2 mbf类图主体思路详解2.2.1. 抽象层&#xff08;abstract层&#xff09;2.2.2. 外部信号输入&#xff08;Actio…

【NI Multisim 14.0虚拟仪器设计——放置虚拟仪器仪表(4通道示波器)】

目录 序言 &#x1f34d;放置虚拟仪器仪表 &#x1f349;4通道示波器 1.“时基”选项组 2.“通道”选项组 序言 NI Multisim最突出的特点之一就是用户界面友好。它可以使电路设计者方便、快捷地使用虚拟元器件和仪器、仪表进行电路设计和仿真。 首先启动NI Multisim 14.0…

C语言 通讯录最终版(动态内存+实时保存)

欢迎来到 Claffic 的博客 &#x1f49e;&#x1f49e;&#x1f49e; 前言&#xff1a; 上期通讯录我们实现了动态内存的申请&#xff0c;但数据依然是存放在内存中&#xff0c;当程序退出的时候&#xff0c;通讯录中的数据自然就不存在了&#xff0c;等下次运行通讯录程序的时候…

什么是REST和RESTful

REST&#xff08;Representational State Transfer&#xff09;表象化状态转变&#xff08;表述性状态转变&#xff09;&#xff0c;在2000年被提出&#xff0c;基于HTTP、URI、XML、JSON等标准和协议&#xff0c;支持轻量级、跨平台、跨语言的架构设计。是Web服务的一种新的架…

单身福利专场——Python采集某相亲地数据

嗨害大家好鸭&#xff01;我是小熊猫~ 咳咳年前最后一天… 一点单身福利… 我想… 应该会有需要的吧… 环境开发: Python 3.8Pycharm 模块使用: import parselimport requestsimport csvimport re 爬虫基本思路流程: 一. 数据来源分析: 1. 明确需求: 采集数据是什么 —…

Linux基本功系列之ping命令实战

文章目录一. 命令介绍二. 语法格式及常用选项三. 参考案例3.1 测试本机与指定网站服务器之间的网络连通性3.2 指定ping的次数3.3 指定时间间隔和次数3.4 设置TTL为2553.5 极快速的测试使用大包ping四. 使用ping命令常见问题总结前言&#x1f680;&#x1f680;&#x1f680; 想…

Java项目部署到云服务器的思路

Java项目部署到云服务器的思路 1 部署项目的前提条件 1.1 购买云服务器 我购买的是腾讯云的服务器,第一年享优惠88一年 cpu好像两核的,作为入门级的也算够用了 如果第二年该续费的时候,我记得因为收到备案什么因素的影响,要提前三个月就续费了,第二年续费价格应该是510 对于学…

思科与华为设备中的OSFP配置命令以及部分实例(超详细~~!!)

目录 一、OSPF相关配置命令 1.思科设备配置命令 &#xff08;1&#xff09;启动OSPF路由进程 &#xff08;2&#xff09;激活参与OSPF路由协议的接口&#xff0c;并且通告结构属于哪个区域的OSPF &#xff08;3&#xff09;配置路由器ID &#xff08;4&#xff09;配置被动…

苹果再次舍弃3纳米,对ASML是沉重打击,ASML得靠中国救命了

苹果在昨晚发布了新款M2 Pro和M2 Max芯片&#xff0c;这两款芯片都没有采用台积电的3纳米工艺&#xff0c;其实不仅是对台积电的打击&#xff0c;也是对ASML的打击&#xff0c;意味着ASML更先进的第二代EUV光刻机可能面临着没有太大需求的问题。一、ASML的愿望ASML当前的主要利…

day43|● 1049. 最后一块石头的重量 II ● 494. 目标和 ● 474.一和零

1049. 最后一块石头的重量 II 1.代码 class Solution { public:int lastStoneWeightII(vector<int>& stones) {int sum 0;for(int i: stones) {sum i;}int t sum;sum sum /2;vector<int>f(sum 1);for (int i 0; i < stones.size(); i) {for (int j …

怎样防止数据怎么泄露了

近年来&#xff0c;各种数据泄露事件越演越烈&#xff0c;数据泄密日益成为企业管理者的梦魇。数据泄密不仅给企业带来严重的直接经济损失&#xff0c;而且还在品牌价值、投资人关系、社会公众形象等多方面造成损害。因此&#xff0c;要想提升企业数据的安全性&#xff0c;就要…

容器虚拟化技术Docker(二)mysql主从配置案例、redis集群搭建及扩容、缩容案例详解

容器虚拟化技术Docker&#xff08;二&#xff09;mysql主从配置案例、redis集群搭建及扩容缩容案例详解 对docker不熟悉的可以参考&#xff1a; 容器虚拟化技术Docker&#xff08;一&#xff09;简介、安装、常见命令、数据卷、安装常规软件 1、Docker安装mysql主从复制 &am…

2023年微软发布的第一个补丁都有什么?

微软于 10 日发布了 2023 年的第一个更新&#xff0c;修复了其Windows操作系统和其他软件中的近 100 个安全漏洞。 2023 年第一个补丁星期二的亮点包括&#xff1a;Windows 中的零日漏洞、美国国家安全局报告的打印机软件缺陷&#xff0c;以及允许未经身份验证的远程攻击者建立…

建木CI自定义节点说明

数据导出导入可以看下 https://gitee.com/jianmu-runners/jianmu-runner-mysq建木节点基于docker 镜像执行 1. 安装 docker & docker-compose 参考 https://blog.csdn.net/pushiqiang/article/details/78682323 https://docs.docker.com/compose/install/other/2.安装&a…

JDK安装与环境变量配置

经验 先使用LightlyLightlyLightly自带的JDKJDKJDK编辑器&#xff0c;进行运行代码&#xff0c;后续学习深入后&#xff0c;再继续探讨JDK的安装&#xff0c;开发大型项目工程时候会自己使用都行啦的回事与打算。 附带JDK安装链接 安装链接: JDK安装链接 总结 慢慢的将JDKJ…

9、Ubuntu安装Tomcat配置部署web

1、安装 Java 这里使用Ubuntu22.04 其他版本也差不多 tomcat是基于Java开发的&#xff0c;安装前需确保已经按照了jdk apt update apt install openjdk-8-jdk 验证是否按照成功 java -version 环境变量 2、安装 Tomcat 下载链接 Tomcat: Apache Tomcat - Apache Tomcat …

Python备份网络设备配置实验-ensp

一、实验简介 实验拓扑 简介 本实验为物理主机(windows电脑)通过物理主机的环回口虚拟网卡与ENSP模拟器中的Cloud建立通信,再与Cloud下面连接的虚拟网络设备通信。从而实现物理主机上面的python脚本抓取ENSP中网络设备的配置信息,并保存在物理主机磁盘指定位置。 本实验…