数组和指针典型例题合集(一维数组、字符数组、二维数组)

news2025/5/10 11:08:10

1.一维数组

数组名的理解

数组名是数组首元素(第一个元素)的地址

但是有两个例外:

1.sizeof (数组名)—— 数组名表示整个数组,就算的是整个数组的大小,单位是字节。

2.&数组名 —— 数组名表示整个数组,取出的是整个数组的地址。

除此之外,所有的数组名表示的都是数组首元素(第一个元素)的地址。

对于数组名a

a  ——  数组名

a  ——  首元素(第一个元素)的地址,int*,  a+1 跳过一个元素

&a  ——  数组的地址,int(*)[4], &a+1 跳过y

辨析一下:

int a[] = { 1,2,3,4 };
// 数组有4个元素


printf("%zd\n", sizeof(a));
// 16 
// sizeof(数组名)


printf("%zd\n", sizeof(a + 0));
// 4/8 
// a是首元素的地址——类型是int*,a+0,还是首元素地址

printf("%zd\n", sizeof(*a));
// 4 
// a是首元素的地址,*a就是首元素,大小是4个字节
// *a == a[0] == *(a+0)

printf("%zd\n", sizeof(a + 1));
// 4/8 
// a是首元素的地址——类型是int*,a+1跳过一个整型,a+1就是第二个元素的地址

printf("%zd\n", sizeof(a[1]));
// 4
// a[1]就是第二个元素,大小4个字节

printf("%zd\n", sizeof(&a));
// 4/8
// &a —— 是数组的地址,数组的地址也是地址
// 而sizeof(&a)取出的是整个数组的地址,是地址就是 4/8 个字节

printf("%zd\n", sizeof(*&a));
// 16
// * 和 & 相互抵消了
// &a 是数组的地址,类型是int(*)[4]
// 对数组指针解引用访问的是数组,计算的是数组的大小

printf("%zd\n", sizeof(&a + 1));
// 4/8
// &a+1 跳过一个数组,数组的地址还是地址,地址就是 4/8 个字节

printf("%zd\n", sizeof(&a[0]));
// 4/8
// 首元素的地址

printf("%zd\n", sizeof(&a[0] + 1));
// 4/8    
// 数组第二个元素的地址    

运行代码验证一下:

//一维数组
int main()
{
	int a[] = { 1,2,3,4 };
	// 数组有4个元素
	printf("%zd\n", sizeof(a));
	// 16 
	// sizeof(数组名)
	printf("%zd\n", sizeof(a + 0));
	// 4/8 
	// a是首元素的地址——类型是int*,a+0,还是首元素地址
	printf("%zd\n", sizeof(*a));
	// 4 
	// a是首元素的地址,*a就是首元素,大小是4个字节
	// *a == a[0] == *(a+0)
	printf("%zd\n", sizeof(a + 1));
	// 4/8 
	// a是首元素的地址——类型是int*,a+1跳过一个整型,a+1就是第二个元素的地址
	printf("%zd\n", sizeof(a[1]));
	// 4
	// a[1]就是第二个元素,大小4个字节
	printf("%zd\n", sizeof(&a));
	// 4/8
	// &a —— 是数组的地址,数组的地址也是地址
	// 而sizeof(&a)取出的是整个数组的地址,是地址就是 4/8 个字节
	printf("%zd\n", sizeof(*&a));
	// 16
	// * 和 & 相互抵消了
	// &a 是数组的地址,类型是int(*)[4]
	// 对数组指针解引用访问的是数组,计算的是数组的大小
	printf("%zd\n", sizeof(&a + 1));
	// 4/8
	// &a+1 跳过一个数组,数组的地址还是地址,地址就是 4/8 个字节
	printf("%zd\n", sizeof(&a[0]));
	// 4/8
	// 首元素的地址
	printf("%zd\n", sizeof(&a[0] + 1));
	// 4/8	
	// 数组第二个元素的地址																																																			
	return 0;
}

运行结果: 

(注意:4/8是根据代码运行环境而定的,本次运行代码是在x64环境下的)

2.字符数组

对以下代码段进行辨析:

代码1:

char arr[] = { 'a','b','c','d','e','f' };
//一个字符一个字节

printf("%d\n", sizeof(arr));
// 6 —— char
// 数组名单独放在sizeof内部了,计算的是数组大小,单位是字节

printf("%d\n", sizeof(arr + 0));
// 4/8
// arr是数组名,表示首元素的地址,arr+0还是首元素的地址
// 是地址就是4/8

printf("%d\n", sizeof(*arr));
// 1
// arr是首元素的地址,*arr就是首元素,大小是1个字节
// *arr —— arr[0] —— *(arr+0)

printf("%d\n", sizeof(arr[1]));
// 1
// arr[1]是第二个元素,大小是1个字节

printf("%d\n", sizeof(&arr));
// 4/8
// &arr 是数组地址,数组地址也是地址,是地址就是4/8
// &arr —— char(*)[6]

printf("%d\n", sizeof(&arr + 1));
// 4/8
// 跳过整个数组,指向了这个数组后面的空间地址

printf("%d\n", sizeof(&arr[0] + 1));
// 4/8
// 是第二个元素的地址,是地址就是4/8

代码运行验证一下(x64):

int main()
{
	char arr[] = { 'a','b','c','d','e','f' };
	//一个字符一个字节
	printf("%d\n", sizeof(arr));
	// 6 —— char
	// 数组名单独放在sizeof内部了,计算的是数组大小,单位是字节
	printf("%d\n", sizeof(arr + 0));
	// 4/8
	// arr是数组名,表示首元素的地址,arr+0还是首元素的地址
	// 是地址就是4/8
	printf("%d\n", sizeof(*arr));
	// 1
	// arr是首元素的地址,*arr就是首元素,大小是1个字节
	// *arr —— arr[0] —— *(arr+0)
	printf("%d\n", sizeof(arr[1]));
	// 1
	// arr[1]是第二个元素,大小是1个字节
	printf("%d\n", sizeof(&arr));
	// 4/8
	// &arr 是数组地址,数组地址也是地址,是地址就是4/8
	// &arr —— char(*)[6]
	printf("%d\n", sizeof(&arr + 1));
	// 4/8
	// 跳过整个数组,指向了这个数组后面的空间地址
	printf("%d\n", sizeof(&arr[0] + 1));
	// 4/8
	// 是第二个元素的地址,是地址就是4/8
	return 0;
}

运行结果:

代码2:

换为 strlen(#include<string.h>)

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

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

// 随机的
// arr是首元素地址
// 数组中没有 \0 导致越界访问,结果是随机的

printf("%d\n", strlen(arr + 0));
// 随机的
// arr + 0 是首元素地址
// 数组中没有 \0 导致越界访问,结果是随机的

//printf("%d\n", strlen(*arr));
// err
// arr是首元素地址
// *arr是首元素,就是 a
// a的ASCII码值为97
// 而 strlen 会将97当成地址,但是97不是我们的地址
// 在内存中,有一大部分空间是不允许被占用的
// 程序会崩溃,得到的是野指针,代码有问题

//printf("%d\n", strlen(arr[1]));
// err
// 同理,arr[1] 是 b

printf("%d\n", strlen(&arr));
// 随机值
// &arr 是数组的地址,起始位置是第一个元素

printf("%d\n", strlen(&arr + 1));
// 随机值
// &arr + 1 是跳过了这个数组的地址

printf("%d\n", strlen(&arr[0] + 1));
// 随机值
// 从第二个元素开始向后统计的

代码验证一下:

//换为strlen
int main()
{
	char arr[] = { 'a','b','c','d','e','f' };
	//arr 中为 a b c d e f
	printf("%d\n", strlen(arr));

	// 随机的
	// arr是首元素地址
	// 数组中没有 \0 导致越界访问,结果是随机的

	printf("%d\n", strlen(arr + 0));
	// 随机的
	// arr + 0 是首元素地址
	// 数组中没有 \0 导致越界访问,结果是随机的
	
	//printf("%d\n", strlen(*arr));
	// err
	// arr是首元素地址
	// *arr是首元素,就是 a
	// a的ASCII码值为97
	// 而 strlen 会将97当成地址,但是97不是我们的地址
	// 在内存中,有一大部分空间是不允许被占用的
	// 程序会崩溃,得到的是野指针,代码有问题
	
	//printf("%d\n", strlen(arr[1]));
	// err
	// 同理,arr[1] 是 b

	printf("%d\n", strlen(&arr));
	// 随机值
	// &arr 是数组的地址,起始位置是第一个元素

	printf("%d\n", strlen(&arr + 1));
	// 随机值
	// &arr + 1 是跳过了这个数组的地址

	printf("%d\n", strlen(&arr[0] + 1));
	// 随机值
	// 从第二个元素开始向后统计的
	return 0;
}

运行结果:

代码3:

printf("%d\n", sizeof(arr));
// 7
// arr是数组名,单独放在sizeof内部
// 计算的是数组总大小,是7个字节

printf("%d\n", sizeof(arr + 0));
// 4/8
// arr表示数组首元素的地址,arr+0还是首元素的地址
// 是地址就是4/8

printf("%d\n", sizeof(*arr));
// 1
// arr表示数组首元素的地址
// *arr是首元素,大小是1给个字节

printf("%d\n", sizeof(arr[1]));
// 1
// 是第二个元素,大小1字节

printf("%d\n", sizeof(&arr));
// 4/8
// &arr是数组地址
// 是地址就是4/8

printf("%d\n", sizeof(&arr + 1));
// 4/8
// &arr是数组地址,+1是指向跳过整个数组的地址
// 是地址就是4/8

printf("%d\n", sizeof(&arr[0] + 1));
// 4/8
// &arr[0] + 1是第二个元素的地址
// 是地址就是4/8

代码运行验证一下:

int main()
{
	char arr[] = "abcdef";
	printf("%d\n", sizeof(arr));
	// 7
	// arr是数组名,单独放在sizeof内部
	// 计算的是数组总大小,是7个字节

	printf("%d\n", sizeof(arr + 0));
	// 4/8
	// arr表示数组首元素的地址,arr+0还是首元素的地址
	// 是地址就是4/8

	printf("%d\n", sizeof(*arr));
	// 1
	// arr表示数组首元素的地址
	// *arr是首元素,大小是1给个字节

	printf("%d\n", sizeof(arr[1]));
	// 1
	// 是第二个元素,大小1字节
	
	printf("%d\n", sizeof(&arr));
	// 4/8
	// &arr是数组地址
	// 是地址就是4/8
	
	printf("%d\n", sizeof(&arr + 1));
	// 4/8
	// &arr是数组地址,+1是指向跳过整个数组的地址
	// 是地址就是4/8
	
	printf("%d\n", sizeof(&arr[0] + 1));
	// 4/8
	// &arr[0] + 1是第二个元素的地址
	// 是地址就是4/8
	return 0;
}

运行结果(x64):

代码4:

char arr[] = "abcdef";
//      a b c d e f \0

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

printf("%d\n", strlen(arr + 0));
// 6
// arr + 0 表示从 arr 所指向的位置偏移 0 个元素
// 等同于arr,还是指向 arr 数组的首元素
// 向后数到 \0 前,有6个字符

printf("%d\n", strlen(*arr));
// err
// 传给 stlen 的是第一个元素 a 的ASCII - 97
// 越界访问

printf("%d\n", strlen(arr[1]));
// err
// 传给 stlen 的是第二个元素 b 的ASCII - 97
// 越界访问

printf("%d\n", strlen(&arr));
// 6
// 是数组的地址,也是首元素的地址
// 从数组的首元素出发的直到 \0 前

printf("%d\n", strlen(&arr + 1));
// 随机值
// 是跳过整个数组的下一个地址
// 在下一段中,不知道什么时候到 \0

printf("%d\n", strlen(&arr[0] + 1));
// 5
// 是数组第二个元素的地址

代码验证一下:

int main()
{
	char arr[] = "abcdef";
	//      a b c d e f \0

	printf("%d\n", strlen(arr));
	// 6
	
	printf("%d\n", strlen(arr + 0));
	// 6
	// arr + 0 表示从 arr 所指向的位置偏移 0 个元素
	// 等同于arr,还是指向 arr 数组的首元素
	// 向后数到 \0 前,有6个字符
	
	//printf("%d\n", strlen(*arr));
	// err
	// 传给 stlen 的是第一个元素 a 的ASCII - 97
	// 越界访问
	
	//printf("%d\n", strlen(arr[1]));
	// err
	// 传给 stlen 的是第二个元素 b 的ASCII - 97
	// 越界访问
	
	printf("%d\n", strlen(&arr));
	// 6
	// 是数组的地址,也是首元素的地址
	// 从数组的首元素出发的直到 \0 前
	
	printf("%d\n", strlen(&arr + 1));
	// 随机值
	// 是跳过整个数组的下一个地址
	// 在下一段中,不知道什么时候到 \0
	
	printf("%d\n", strlen(&arr[0] + 1));
	// 5
	// 是数组第二个元素的地址

	return 0;
}

运行结果(x64):

代码5:

const char* p = "abcdef";
// "abcdef"是常量字符串
// a b c d e f \0
// p指向a
// p是指针变量

printf("%d\n", sizeof(p));
// 4/8
// 计算指针变量的大小,和地址大小一样
// 是地址就是4/8

printf("%d\n", sizeof(p + 1));
// 4/8
// p + 1是 b 的地址

printf("%d\n", sizeof(*p));
// 1
// p 的类型是 char*,*p 则是 char 类型
// char 类型是1个字节

printf("%d\n", sizeof(p[0]));
// 1
// p[0] —— *(p+0) —— *p —— ‘a’
// 把常量字符串想象为数组
// p 可以理解为数组名
// p[0] 就是首元素
// p 的类型是 char*,*p 则是 char 类型
// char 类型是1个字节

printf("%d\n", sizeof(&p));
// 4/8
// &p 是对 p 取地址
// 地址大小是4/8字节

printf("%d\n", sizeof(&p + 1));
// 4/8
// p 的类型是 char*
// p 为一级指针,对一级指针取地址要用二级指针接收
// char* q = &p;
// &p + 1 == q + 1
// &p + 1 就是跳过 p 指针变量后的地址

printf("%d\n", sizeof(&p[0] + 1));
// 4/8
// p[0] 就是首元素
// &p[0] 是首元素地址,&p[0] + 1是第二个元素地址
// 地址大小是4/8字节

代码验证一下:

int main()
{
	const char* p = "abcdef";
	// "abcdef"是常量字符串
	// a b c d e f \0
	// p指向a
	// p是指针变量
	
	printf("%d\n", sizeof(p));
	// 4/8
	// 计算指针变量的大小,和地址大小一样
	// 是地址就是4/8
	
	printf("%d\n", sizeof(p + 1));
	// 4/8
	// p + 1是 b 的地址

	printf("%d\n", sizeof(*p));
	// 1
	// p 的类型是 char*,*p 则是 char 类型
	// char 类型是1个字节

	printf("%d\n", sizeof(p[0]));
	// 1
	// p[0] —— *(p+0) —— *p —— ‘a’
	// 把常量字符串想象为数组
	// p 可以理解为数组名
	// p[0] 就是首元素
	// p 的类型是 char*,*p 则是 char 类型
	// char 类型是1个字节

	printf("%d\n", sizeof(&p));
	// 4/8
	// &p 是对 p 取地址
	// 地址大小是4/8字节

	printf("%d\n", sizeof(&p + 1));
	// 4/8
	// p 的类型是 char*
	// p 为一级指针,对一级指针取地址要用二级指针接收
	// char* q = &p;
	// &p + 1 == q + 1
	// &p + 1 就是跳过 p 指针变量后的地址

	printf("%d\n", sizeof(&p[0] + 1));
	// 4/8
	// p[0] 就是首元素
	// &p[0] 是首元素地址,&p[0] + 1是第二个元素地址
	// 地址大小是4/8字节

	return 0;
}

运行结果(x64):

代码6:

    char* p = "abcdef";
    printf("%d\n", strlen(p));
    // 6
    // 从‘a’开始读到 \0
    
    printf("%d\n", strlen(p + 1));
    // 5
    // 从‘b’开始读到 \0

    //printf("%d\n", strlen(*p));
    // err
    // *p 就是‘a’
    // 传给 stlen 的是第一个元素 a 的ASCII - 97
    // 越界访问

    //printf("%d\n", strlen(p[0]));
    // err
    // p[0] —— *(p+0) —— *p —— ‘a’
    // 传给 stlen 的是第一个元素 a 的ASCII - 97
    // 越界访问
    
    printf("%d\n", strlen(&p));
    // 随机值
    // &p 是从指针变量 p 的起始位置开始读,与常量字符串无关了
    // 不知道什么时候到达\0
    
    printf("%d\n", strlen(&p + 1));
    // 随机值
    // &p + 1 是从跳过指针变量 p 的位置开始读
    // 不知道什么时候到达\0
    
    printf("%d\n", strlen(&p[0] + 1));
    // 5
    // p[0] —— *(p+0) —— *p —— ‘a’
    // &p[0]就是‘a’又取了个地址,+ 1 则是‘b’
    // 就是从‘b’开始读到 \0

运行代码验证一下:

int main()
{
	char* p = "abcdef";
	printf("%d\n", strlen(p));
	// 6
	// 从‘a’开始读到 \0
	
	printf("%d\n", strlen(p + 1));
	// 5
	// 从‘b’开始读到 \0

	//printf("%d\n", strlen(*p));
	// err
	// *p 就是‘a’
	// 传给 stlen 的是第一个元素 a 的ASCII - 97
	// 越界访问

	//printf("%d\n", strlen(p[0]));
	// err
	// p[0] —— *(p+0) —— *p —— ‘a’
	// 传给 stlen 的是第一个元素 a 的ASCII - 97
	// 越界访问
	
	printf("%d\n", strlen(&p));
	// 随机值
	// &p 是从指针变量 p 的起始位置开始读,与常量字符串无关了
	// 不知道什么时候到达\0
	
	printf("%d\n", strlen(&p + 1));
	// 随机值
	// &p + 1 是从跳过指针变量 p 的位置开始读
	// 不知道什么时候到达\0
	
	printf("%d\n", strlen(&p[0] + 1));
	// 5
	// p[0] —— *(p+0) —— *p —— ‘a’
	// &p[0]就是‘a’又取了个地址,+ 1 则是‘b’
	// 就是从‘b’开始读到 \0

	return 0;
}

运行结果(x64):

3.二维数组

假设已知一个三行四列的数组,进行以下辨析:

    printf("%d\n", sizeof(a));
    // 48
    // a是数组名,计算的是数组的大小
    // 单位是字节,3*4*sizeof(int)=3*4*4=48
    
    printf("%d\n", sizeof(a[0][0]));
    // 4
    // a[0][0]是第一行第一个元素的大小,是4个字节

    

    printf("%d\n", sizeof(a[0]));
    // 16
    // a[0]是第一行的数组名
    // 数组名单独在sizeof内,计算的是数组的总大小
    // 第一行四个元素的大小 4*4=16

  

    printf("%d\n", sizeof(a[0] + 1));
    // 4/8
    // a[0]并没有单独放在sizeof内
    // a[0]是数组首元素的地址,就是a[0][0]的地址
    // +1后是a[0][1]的地址
    // 是地址就是4/8

    printf("%d\n", sizeof(*(a[0] + 1)));
    // 4
    // a[0] + 1后是a[0][1]的地址
    // *(a[0] + 1)是第一行第二个元素
    
    printf("%d\n", sizeof(a + 1));
    // 4/8
    // a 作为数组,并没有单独放在 sizeof 内
    // a 表示数组首元素的地址,是二维数组首元素
    // 第一行的地址,也就是a[1]的地址
    // +1表示跳过一行的地址
    // a + 1 是第二行的地址,是数组指针,是地址的大小
    // 是地址就是4/8

    printf("%d\n", sizeof(*(a + 1)));
    // 16
    // a + 1 是第二行的地址
    // *(a + 1) j就是第二行 
    // 计算的是第二行的大小3*4*4=16
    // 另一个理解方法
    // *(a + 1) = a[1]
    // a[1]是第二行的数组名
    // 相当于 sizeof(arr[1])
    // 意思是将数组名单独放在 sizeof 内部了
    // 同理,计算的是第二行的大小
    
    printf("%d\n", sizeof(&a[0] + 1));
    // 4/8
    // a[0] 是第一行的数组
    // &a[0] 取出的是数组的地址,是第一行的地址
    // &a[0] + 1,是第二行的地址
    // 是地址就是4/8

    printf("%d\n", sizeof(*(&a[0] + 1)));
    // 16
    // &a[0] + 1,是第二行的地址
    // *(&a[0] + 1)是对第二行的地址解引用,就是第二行
    // 计算的是第二行的大小 4*4=16
    
    printf("%d\n", sizeof(*a));
    // 16
    // a 作为数组,并没有单独放在 sizeof 内
    // a 表示数组首元素的地址,是二维数组首元素
    // 第一行的地址,也就是a[1]的地址
    // *a 解引用,就是第一行
    // 计算的是第一行的大小 4*4=16
    // 另一种理解方法*a == *(a + 0) == a[0]

    printf("%d\n", sizeof(a[3]));
    // a[3]是第四行,单独放在 sizeof 内
    // 其无需真实存在,只需要通过类型推导就可以计算出长度
    // 推到得出,是类似于 int [4] 的一个整型数组
    // 计算的是第四行的大小,4*4=16
    
    return 0;
}

代码运行验证一下:

int main()
{
	int a[3][4] = { 0 };
	
	printf("%d\n", sizeof(a));
	// 48
	// a是数组名,计算的是数组的大小
	// 单位是字节,3*4*sizeof(int)=3*4*4=48
	
	printf("%d\n", sizeof(a[0][0]));
	// 4
	// a[0][0]是第一行第一个元素的大小,是4个字节

	printf("%d\n", sizeof(a[0]));
	// 16
	// a[0]是第一行的数组名
	// 数组名单独在sizeof内,计算的是数组的总大小
	// 第一行四个元素的大小 4*4=16

	printf("%d\n", sizeof(a[0] + 1));
	// 4/8
	// a[0]并没有单独放在sizeof内
	// a[0]是数组首元素的地址,就是a[0][0]的地址
	// +1后是a[0][1]的地址
	// 是地址就是4/8

	printf("%d\n", sizeof(*(a[0] + 1)));
	// 4
	// a[0] + 1后是a[0][1]的地址
	// *(a[0] + 1)是第一行第二个元素
	
	printf("%d\n", sizeof(a + 1));
	// 4/8
	// a 作为数组,并没有单独放在 sizeof 内
	// a 表示数组首元素的地址,是二维数组首元素
	// 第一行的地址,也就是a[1]的地址
	// +1表示跳过一行的地址
	// a + 1 是第二行的地址,是数组指针,是地址的大小
	// 是地址就是4/8

	printf("%d\n", sizeof(*(a + 1)));
	// 16
	// a + 1 是第二行的地址
	// *(a + 1) j就是第二行 
	// 计算的是第二行的大小3*4*4=16
	// 另一个理解方法
	// *(a + 1) = a[1]
	// a[1]是第二行的数组名
	// 相当于 sizeof(arr[1])
	// 意思是将数组名单独放在 sizeof 内部了
	// 同理,计算的是第二行的大小
	
	printf("%d\n", sizeof(&a[0] + 1));
	// 4/8
	// a[0] 是第一行的数组
	// &a[0] 取出的是数组的地址,是第一行的地址
	// &a[0] + 1,是第二行的地址
	// 是地址就是4/8

	printf("%d\n", sizeof(*(&a[0] + 1)));
	// 16
	// &a[0] + 1,是第二行的地址
	// *(&a[0] + 1)是对第二行的地址解引用,就是第二行
	// 计算的是第二行的大小 4*4=16
	
	printf("%d\n", sizeof(*a));
	// 16
	// a 作为数组,并没有单独放在 sizeof 内
	// a 表示数组首元素的地址,是二维数组首元素
	// 第一行的地址,也就是a[1]的地址
	// *a 解引用,就是第一行
    // 计算的是第一行的大小 4*4=16
	// 另一种理解方法*a == *(a + 0) == a[0]

	printf("%d\n", sizeof(a[3]));
	// a[3]是第四行,单独放在 sizeof 内
	// 其无需真实存在,只需要通过类型推导就可以计算出长度
	// 推到得出,是类似于 int [4] 的一个整型数组
	// 计算的是第四行的大小,4*4=16
	
	return 0;
}

 运行结果(x64):

数组名的意义:
1. sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组的大小。
2. &数组名,这里的数组名表示整个数组,取出的是整个数组的地址。
3. 除此之外所有的数组名都表示首元素的地址。

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

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

相关文章

地级市-机器人、人工智能等未来产业水平(2009-2023年)-社科数据

地级市-机器人、人工智能等未来产业水平&#xff08;2009-2023年&#xff09;-社科数据https://download.csdn.net/download/paofuluolijiang/90623814 https://download.csdn.net/download/paofuluolijiang/90623814 此数据集统计了2009-2023年全国地级市在机器人、人工智能等…

epub格式转txt格式工具,txt批量转PDF

epub格式转txt格式工具&#xff0c;功能如图&#xff1a; txt格式批量转PDF 参考原文&#xff1a;epub格式转txt格式工具&#xff0c;txt批量转PDF 轻轻一点就关注, 好运连连挡不住&#xff0c;点个关注吧。

电赛经验分享——模块篇

1、前言 打算在这一个专栏中&#xff0c;分享一些本科控制题电赛期间的经验&#xff0c;和大家共同探讨&#xff0c;也希望能帮助刚刚参加电赛的同学&#xff0c;了解一些基本的知识。一些见解和看法可能不同或有错误&#xff0c;欢迎批评指正。 在本文中&#xff0c;主要介绍笔…

JVM之内存管理(一)

部分内容来源&#xff1a;JavaGuide二哥Java 图解JVM内存结构 内存管理快速复习 栈帧&#xff1a;局部变量表&#xff0c;动态链接&#xff08;符号引用转为真实引用&#xff09;&#xff0c;操作数栈&#xff08;存储中间结算结果&#xff09;&#xff0c;方法返回地址 运行时…

鸿蒙编译boost整合linux跨平台应用

openharmony deveco 4.1支持armeabi-v7a deveco 5.0后不支持arm32位系统 boost编译 使用deveco的写cmake集成boost boost使用1.88的最新版本&#xff0c;带cmake工具链 https://github.com/boostorg/boost.git boost的源码都在sub_module中 deveco 4.1的版本sdk最高到9&am…

rabbitMQ消息问题与解决

rabbitMQ 消息顺序性、消息幂等性、消息不丢失、最终一致性、补偿机制、消息队列设计 1.消息顺序性 溯源&#xff1a; 消息队列中的若干消息如果是对同一个数据进行操作&#xff0c;这些操作具有前后的关系&#xff0c;必须要按前后的顺序执行&#xff0c;否则就会造成数据异常…

Java SE(10)——抽象类接口

1.抽象类 1.1 概念 在之前讲Java SE(6)——类和对象&#xff08;一&#xff09;的时候说过&#xff0c;所有的对象都可以通过类来抽象。但是反过来&#xff0c;并不是说所有的类都是用来抽象一个具体的对象。如果一个类本身没有足够的信息来描述一个具体的对象&#xff0c;而…

学习threejs,使用Physijs物理引擎

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️Physijs 物理引擎1.1.1 ☘️…

allure生成测试报告(搭配Pytest、allure-pytest)

文章目录 前言allure简介allure安装软件下载安装配置环境变量安装成功验证 allure运行流程allure装饰器函数基本说明装饰器函数使用allure.attach 命令行运行利用allure-pytest生成中间结果json 查看测试报告总览页面每个tab页的说明类别页面测试套图表页面时间刻度功能页面包 …

龙虎榜——20250509

上证指数今天缩量&#xff0c;整体跌多涨少&#xff0c;走势处于日线短期的高位~ 深证指数今天缩量小级别震荡&#xff0c;大盘股表现更好~ 2025年5月9日龙虎榜行业方向分析 一、核心行业方向 军工航天 • 代表个股&#xff1a;航天南湖、天箭科技、襄阳轴承。 • 驱动逻辑…

操作系统的初步了解

目录 引言&#xff1a;什么是操作系统&#xff1f; 一、设计操作系统的目的 二、操作系统是做什么的&#xff1a; 操作系统主要有四大核心任务&#xff1a; 1. 管理硬件 2. 运行软件 3. 存储数据 4. 提供用户界面 如何理解操作系统的管理呢&#xff1f; 1. 什么是操作…

软件工程之软件项目管理深度解析

前文基础&#xff1a; 1.软件工程学概述&#xff1a;软件工程学概述-CSDN博客 2.软件过程深度解析&#xff1a;软件过程深度解析-CSDN博客 3.软件工程之需求分析涉及的图与工具&#xff1a;软件工程之需求分析涉及的图与工具-CSDN博客 4.软件工程之形式化说明技术深度解…

基于Boost库、Jsoncpp、cppjieba、cpp-httplib等构建Boost搜索引擎

⭐️个人主页&#xff1a;小羊 ⭐️所属专栏&#xff1a;项目 很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~ 目录 项目背景技术栈和项目环境正排索引和倒排索引数据去标签与清洗下载数据源去标签 建立索引构建正排索引构建倒排索引 建立搜索引擎h…

Qt 通过控件按钮实现hello world + 命名规范(7)

文章目录 使用编辑框来完成 hello world通过编辑图形化界面方式通过纯代码方式 通过按钮的方式来创建 hello world通过编辑图形化界面方式通过纯代码方式 总结Qt Creator中的快捷键如何使用文档命名规范 简介&#xff1a;这篇文章着重点并不在于创建hello world程序&#xff0c…

关于大数据的基础知识(二)——国内大数据产业链分布结构

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///计算机爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于大数据的基础知识&#xff08;二&a…

Winform(11.案例讲解1)

今天写两个案例,用于更好的理解控件的使用 在写之前先写一个类 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace _1.案例讲解 { internal class Student { public string …

电机密集型工厂环境下的无线通信技术选型与优化策略

点击下面图片带您领略全新的嵌入式学习路线 &#x1f525;爆款热榜 88万阅读 1.6万收藏 在电机、变频器、电焊机等强电磁干扰源遍布的工业环境中&#xff0c;无线通信系统的可靠性面临严峻挑战。本文从抗干扰能力、传输稳定性、实时性需求三大核心维度出发&#xff0c;结合工…

一文了解氨基酸的分类、代谢和应用

氨基酸&#xff08;Amino acids&#xff09;是在分子中含有氨基和羧基的一类化合物。氨基酸是生命的基石&#xff0c;人类所有的疾病与健康状况都与氨基酸有直接或间接的关系。氨基酸失衡可引起肝硬化、神经系统感染性疾病、糖尿病、免疫性疾病、心血管疾病、肾病、肿瘤等各类疾…

系统学习算法:动态规划(斐波那契+路径问题)

题目一&#xff1a; 思路&#xff1a; 作为动态规划的第一道题&#xff0c;这个题很有代表性且很简单&#xff0c;适合入门 先理解题意&#xff0c;很简单&#xff0c;就是斐波那契数列的加强版&#xff0c;从前两个数变为前三个数 算法原理&#xff1a; 这五步可以说是所有…

JAVA房屋租售管理系统房屋出租出售平台房屋销售房屋租赁房屋交易信息管理源码

一、源码描述 这是一套房屋租售管理源码&#xff0c;基于SpringBootVue框架&#xff0c;后端采用JAVA开发&#xff0c;源码功能完善&#xff0c;涵盖了房屋租赁、房屋销售、房屋交易等业务。 二、源码截图