C语言——指针、数组的经典笔试题目
文章目录
- 前言
- 1.一维数组
- 2.字符数组
- 3.二维数组
- 4.经典指针试题
前言
1、数组名通常表示首元素地址,sizeof(数组名)和&数组名两种情况下,数组名表示整个数组。
2、地址在内存中唯一标识一块空间,大小是4/8字节。32位平台4字节,64位平台8字节。
3、指针变量是用来存放地址的变量。大小是4/8字节。32位平台4字节,64位平台8字节。
4、strlen库函数使用来统计’\0’前的字符个数的。
1.一维数组
首先我想先介绍一下sizeof()关键字。首先sizeof关键字计算的是类型的大小,单位是字节。sizeof()内部的表达是不参与运算。因为sizeof内部表达式在预处理期间便已经计算完毕。
int main()
{int a = 2;short b = 3;printf("%u\n", sizeof(b = a + 3));//这里a+3表达式是不计算的//这句代码等价于sizeof(short);printf("%d\n",b);return 0;
}

#include<stdio.h>int main()
{int a[] = { 1,2,3,4 };printf("%d\n", sizeof(a));//可参考解析(1)printf("%d\n", sizeof(a + 0));//可参考解析(2)printf("%d\n", sizeof(*a));//可参考解析(3)printf("%d\n", sizeof(a + 1));//可参考解析(4)printf("%d\n", sizeof(a[1]));//可参考解析(5)printf("%d\n", sizeof(&a));//可参考解析(6)printf("%d\n", sizeof(*&a));//可参考解析(7)printf("%d\n", sizeof(&a + 1));//可参考解析(8)printf("%d\n", sizeof(&a[0]));//可参考解析(9)printf("%d\n", sizeof(&a[0] + 1));//可参考解析(10)return 0;
}

解析(1):这里数组名单独放在sizeof内部,表示整个数组。数组4各元素,每个元素4个字节,所以是16字节
解析(2):a+0,这里数组名表示首元素地址,首元素地址+0,本质是地址。是地址就是4/8字节,地址的大小取决于平台,32位平台下,地址是4字节。64位平台下,地址是8字节。
解析(3):这里a表示首元素地址,对首元素地址进行*解引用操作,拿到的是第一个元素。所以是4个字节。
解析(4):a+1表示首元素地址+1,就是第二个元素的地址,是地址就是4/8字节。
解析(5):a[1]可以把它理解成 (a+1),a[1]本质上是数组第二个元素。整型数组每个元素的类型是整型,所以是4字节。
解析(6):sizeof(&a),这里&a取出的是整个数组地址。类型是整型数组指针int([5]);,指针的大小就是4/8字节。
解析(7): *&a,可以将 *和&进行抵消,也就是sizeof(a),数组名单独放在sizeof()内部,表示整个数组。也可以理解成先取出了整个数组的地址,在解引用访问整个数组,此时该表达式的类型就是int [4] ,大小就是16字节。
解析(8):&a+1,取出了整个数组的地址,+1跳过整个数组,单数本质还是数组的地址,是地址就是4/8字节。
解析(9):&a[0],取出的是第一个元素的地址,是地址就是4/8字节。
解析(10):&a[0]+1,取出的是第二个元素的地址,是地址就是4/8字节。
2.字符数组
#include<stdio.h>
#include<string.h>char arr[] = {'a','b','c','d','e','f'};
printf("%d\n", sizeof(arr));//分析请见解析(1)
printf("%d\n", sizeof(arr+0));//分析请见解析(2)
printf("%d\n", sizeof(*arr));//分析请见解析(3)
printf("%d\n", sizeof(arr[1]));//分析请见解析(4)
printf("%d\n", sizeof(&arr));//分析请见解析(5)
printf("%d\n", sizeof(&arr+1));//分析请见解析(6)
printf("%d\n", sizeof(&arr[0]+1));//分析请见解析(7)printf("%d\n", strlen(arr));//分析请见解析(8)
printf("%d\n", strlen(arr+0));//分析请见解析(9)
printf("%d\n", strlen(*arr));//分析请见解析(10)
printf("%d\n", strlen(arr[1]));//分析请见解析(11)
printf("%d\n", strlen(&arr));//分析请见解析(12)
printf("%d\n", strlen(&arr+1));//分析请见解析(13)
printf("%d\n", strlen(&arr[0]+1));//分析请见解析(14)
解析(1):sizeof(arr),此时数组名单独放在内部,表示的是整个数组的大小。大小是6个字节。arr 表示整个元素的大小是因为,它的本质是*&arr。&arr的类型是char (*)[6],对这个指针变量解引用操作得到的便是整个数组,即char[6]。所以是6个字节。
解析(2):arr+0 表示的是首元素的地址,此时数组名表示首元素地址,首元素地址+0还是首元素地址。是地址就是4/8字节。
解析(3):arr,此时数组名表示首元素地址,操作后访问的是数组第一个元素,即’a’。所以大小是1字节。
解析(4):arr[1],此时数组名表示首元素地址。对首元素地址进行下标访问操作,访问的是数组第二个元素,即’b’。char的大小是1字节。也可以将arr[1] 理解为 (arr+1)。
解析(5):&arr,取出的使整个数组的地址,类型是char ()[6] 的数组指针。是指针就是4/8字节。
解析(6):&arr+1,此时&arr取出了整个数组的地址,+1后跳过整个数组的地址。类型依旧还是char ()[6] 。是指针大小就是4/8字节。
解析(7):&arr[0]+1,首先,arr和[0]结合,表示数组第一个元素,对其进行取地址操作,取出的是第一个元素的地址。+1后便是第二个元素的地址,是地址就是4/8字节。
解析(8):此时的arr是数组首元素的地址。由于字符数组内没有strlen的停止标识’\0’。故长度不可知,是随机值。
解析(9):arr+0表示的是首元素的地址向后偏移0个字节,故还是首元素地址。由于字符数组内没有strlen的停止标识’\0’。长度不可知,是随机值。
解析(10):arr,arr表示首元素地址,对其进行解引用操作,得到’a’,而’a’ 在内存中的值是ascii值97,将97作为参数传给strlen函数会造成访问权限冲突,所以这行代码是错误的。
解析(11):arr[1],表示的是第二个元素’b’,'b’的ascii值为98,将98作为参数传给strlen函数会造成访问权限冲突,所以这行代码是错误的。
解析(12):&arr,&arr的类型是char()[6],而库函数strlen参数部分为(const char str);,故类型不匹配,不建议这样传参。但是,编译器还是能跑过去,依旧存在’\0’位置不可预知,结果是随机值。
解析(13):&arr+1,依旧是一个字符数组指针,同上述所述,结果依旧是随机值。
解析(14):&arr[0]+1,此时的参数是第二个元素的地址。因为\0’标志位置不可知,所以结果是随机值。
char arr[] = "abcdef";
printf("%d\n", sizeof(arr));//分析请见解析(1)
printf("%d\n", sizeof(arr+0));//分析请见解析(2)
printf("%d\n", sizeof(*arr));//分析请见解析(3)
printf("%d\n", sizeof(arr[1]));//分析请见解析(4)
printf("%d\n", sizeof(&arr));//分析请见解析(5)
printf("%d\n", sizeof(&arr+1));//分析请见解析(6)
printf("%d\n", sizeof(&arr[0]+1));//分析请见解析(7)printf("%d\n", strlen(arr));//分析请见解析(8)
printf("%d\n", strlen(arr+0));//分析请见解析(9)
printf("%d\n", strlen(*arr));//分析请见解析(10)
printf("%d\n", strlen(arr[1]));//分析请见解析(11)
printf("%d\n", strlen(&arr));//分析请见解析(12)
printf("%d\n", strlen(&arr+1));//分析请见解析(13)
printf("%d\n", strlen(&arr[0]+1));//分析请见解析(14)

解析(1):arr,此时的数组名单独放在sizeof内部,表示整个数组。“字符串内容”,需要加上’\0’的大小。所以大小是7字节。
解析(2):arr+0,此时数组名没有单独放在sizeof内部表示首元素的地址,+0依旧是首元素地址。是地址就是4/8字节。
解析(3):*arr,此时数组名表是首元素地址,对首元素进行解引用操作后,访问的是首个元素,即’a’,大小1字节。
解析(4):arr[1],对首元素地址进行下标访问操作,访问的数组第二个元素。因为数组下标从0开始。所以大小是1字节。
解析(5):&arr表示取出整个数组的地址。是地址就是4/8字节。
解析(6):&arr+1,&arr表示取出整个数组的地址,+1跳过整个数组的地址。是地址就是4/8字节。
解析(7):&arr[0]+1,arr首先和[0]结合,表示第一个元素,&第一个元素的地址,+1就是第二个元素的地址。是地址就是4/8字节。
解析(8):arr,没有放在sizeof内部也没有&,此时arr数组名表示首元素的地址。此时,strlen统计的是’\0’字符前的字符个数。长度为6。
解析(9):arr+0,此时arr表示首元素的地址,+0向后偏移0个元素大小,还是首元素地址。strlen统计的长度为6。
解析(10):*arr,解引用操作访问首元素地址,访问的是首元素’a’。字符’a’的ASCII值为97,将97作为地址传给strlen,会造成访问权限冲突,所以这段代码是错误的。
解析(11):arr[1],arr表示首元素地址,通过[]下标访问操作符,访问数组第二个元素,即’b’,‘b’作为参数传递给strlen,传过去的是’b’的ASCII值98,此操作会造成访问权限的冲突,故此代码错误。
解析(12):&arr,取出的是arr字符串数组的地址,类型是char()[7],而strlen所需的参数是char *的指针。类型不匹配,而在一些类型检查比较严谨编译器环境系,这段代码是无法运行的。但是在作者使用的VS2019环境下,编译器会将类型强制转化成char *,从而得到的结果是6.
解析(13):&arr+1,&arr取出了整个字符串数组的地址,+1跳过了整个数组,指向的是数组后内存空间的地址。而该内存空间的内容是不可预知的。所以strlen统计的长是随机值。
解析(14):&arr[0]+1,arr首先和[]结合,表示的是数组第一个元素。取出第一个元素的地址,+1后表示的是第二个元素的地址,即’b’的地址。此时统计字符串长度,从’b’开始统计,长度为5。
int main()
{char* p = "abcdef";printf("%d\n", sizeof(p));//分析请见解析(1)printf("%d\n", sizeof(p+0));//分析请见解析(2)printf("%d\n", sizeof(*p));//分析请见解析(3)printf("%d\n", sizeof(p[1]));//分析请见解析(4)printf("%d\n", sizeof(&p));//分析请见解析(5)printf("%d\n", sizeof(&p+1));//分析请见解析(6)printf("%d\n", sizeof(&p[0]+1));//分析请见解析(7)printf("%d\n", strlen(p));//分析请见解析(8)printf("%d\n", strlen(p+0));//分析请见解析(9)printf("%d\n", strlen(*p));//分析请见解析(10)printf("%d\n", strlen(p[1]));//分析请见解析(11)printf("%d\n", strlen(&p));//分析请见解析(12)printf("%d\n", strlen(&p+1));//分析请见解析(13)printf("%d\n", strlen(&p[0]+1));//分析请见解析(14)return 0;
}

解析(1):p是一个char* 指针变量,大小是4/8字节。
解析(2):p是一个char* 指针变量,+0向后偏移一个char* 指针,本质还是指针,是指针就是4/8字节大小。
解析(3):p是存放常量字符串首字符地址的指针,对其进行解引用访问操作后,访问的是常量字符串的首字符’b’,它的大小是1字节。
解析(4):p[1],其实就是对p进行下标访问操作,访问的是p+1地址处的内容,即*(p+1),计算的是’b’的大小,是1字节。
解析(5):&p,取出的是一级指针变量p的地址,类型是二级字符指针,是指针就是4/8字节大小。
解析(6):&p+1,取出p的地址,+1后指向p地址后的一个指针大小的地址,是地址就是4/8字节。
解析(7):&p[0]+1,首先p和[]结合,表示首字符,对其进行取地址操作后,得到的是首字符地址,+1得到第二个字符地址,是地址就是4/8字节大小。
解析(8):p指向的是常量字符串首字符的地址,所以strlen统计的是常量字符串’\0’前的字符个数,长度为6。
解析(9):p+0,表示首元素的地址向后偏移0个字符指针,还是首元素地址,长度是6。
解析(10):*p,p表示首元素地址,*p表示首元素,将首元素’a’作为strlen参数,会造成访问权限冲突,故这是一行错误的代码。
解析(11):p[1],对首元素地址进行下标访问操作,访问的是第二个字符。也就是’b’,,将’b作为strlen参数,会造成访问权限冲突,故这是一行错误的代码。
解析(12):&p,取出的字符指针变量p的地址,故’\0’的位置不可预知。所以长度是随机值。
解析(13):&p+1,&p取出的字符指针变量p的地址,+1后跳过一个指针,指向&P后面的一块内容。而该地址及其后面的内容不可预知,所以长度依旧是随机值。
解析(14):&p[0]+1,,p首先和[]结合,表示的是数组第一个元素。取出第一个元素的地址,+1后表示的是第二个元素的地址,即’b’的地址。此时统计字符串长度,从’b’开始统计,长度为5。
3.二维数组
int mian()
{int a[3][4] = { 0 };printf("%d\n", sizeof(a));//分析请见解析(1)printf("%d\n", sizeof(a[0][0]));//分析请见解析(2)printf("%d\n", sizeof(a[0]));//分析请见解析(3)printf("%d\n", sizeof(a[0] + 1));//分析请见解析(4)printf("%d\n", sizeof(*(a[0] + 1)));//分析请见解析(5)printf("%d\n", sizeof(a + 1));//分析请见解析(6)printf("%d\n", sizeof(*(a + 1)));//分析请见解析(7)printf("%d\n", sizeof(&a[0] + 1));//分析请见解析(8)printf("%d\n", sizeof(*(&a[0] + 1)));//分析请见解析(9)printf("%d\n", sizeof(*a));//分析请见解析(10)printf("%d\n", sizeof(a[3]));//分析请见解析(11)return 0;
}

解析(1):二维数组数组名单独放在sizeof内部,表示整个数组,大小是48字节。
解析(2):a[0][0] 表示第一行第一个元素,大小是4字节。
解析(3):a[0],数组名表示第一行的地址,类型是int()[4],对其进行下标访问操作,访问的是第一行数组,类型是int[4],所以计算的大小是16字节。
解析(4):a[0] + 1,a[0]是第一行数组名,但是数组名没有单独放在sizeof内部,是第一行的地址,+1跳过一行,表示是第二行的地址,是地址就是4/8字节。
解析(5):(a[0] + 1),首先根据上述分析,a[0] + 1是第二行的地址。对其进行解引用操作后,得到的是第二行的数组名,所以大小是16字节。
解析(6):a + 1,此时数组名表示第一行的地址,+1后表示第二行的地址。是地址就是4/8字节。
解析(7):(a + 1),a+1表示第二行的地址,对其解引用后,表示整个第二行,大小是16字节。
解析(8):&a[0] + 1,a表示第一行的地址,和[]结合后表示整个第一行,对其&拿到的是第一行的地址,+1 表示第二行的地址。是地址就是4/8字节。
解析(9):(&a[0] + 1),上述分析&a[0] + 1为第二行的地址,对其进行解引用操作后表示的是整个第二行,大小是16字节。
解析(10):*a,此时a表示第一行的地址,对其进行解引用操作,拿到的是整个第一行,大小是16字节。
解析(11):a[3],上述分析a[3]表示整个第4行,但是a[3][4]没有第4行,但是这不影响sizeof计算大小,因为sizeof计算的是类型的大小,所以是16字节。
4.经典指针试题
试题一
int main()
{int a[5] = { 1, 2, 3, 4, 5 };int *ptr = (int *)(&a + 1);printf( "%d,%d", *(a + 1), *(ptr - 1));return 0;
}
//程序的结果是什么?


解析:首先,定义一维整型数组a[5],接着,又定义了整型指针ptr 存放&a+1的地址。&a 表示的是整个数组的地址,类型是int(*)[5] ,+1后跳过整个数组,指向的位置是5后面一个指针的地址。将其进行强制类型转化后赋给ptr。ptr-1指向的是a+4的地址,解引用后访问的是a[4]的内容也就是5,a没有单独放在sizeof内部,表示的是首元素地址,+1后解引用操作访问的是第二个元素也就是2。故程序运行的结果是2,5。
试题二
//由于还没学习结构体,这里告知结构体的大小是20个字节
struct Test
{int Num;char* pcName;short sDate;char cha[2];short sBa[4];
}*p;
//假设p 的值为0x100000。 如下表表达式的值分别为多少?
//已知,结构体Test类型的变量大小是20个字节
int main()
{printf("%p\n", p + 0x1);printf("%p\n", (unsigned long)p + 0x1);printf("%p\n", (unsigned int*)p + 0x1);return 0;
}
解析:
printf(“%p\n”, p + 0x1);,首先已知结构体大小是占20字节空间,那么结构体指针+1,跳过一个结构体,也就是跳过20字节。20的转化十六进制数就是14,当前作者使用的是32位平台,一个地址是4字节。故0x00100000+0x14,结果是0x00100014。
printf(“%p\n”, (unsigned long)p + 0x1);,这里将p强制类型转化成无符号长整型,整型+1 就是+1,所以结果是0x00100001。
printf(“%p\n”, (unsigned int*)p + 0x1);,这里将p强制类型转化成无符号整型指针,无符号整型指针+1 跳过4个字节,故结果是0x00100004

试题三
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;
}


解析:首先定义一维整型数组a[4],元素有{1,2,3,4}。&a取出的是整个数组的地址,+1跳过整个数组,将结果强制类型转化成整型指针变量并赋给整型指针ptr1。此时ptr1指向的空间是a+4,er ptr[-1] == a+4-1 ==a+3,对其解引用操作,访问的是a[3]也就是4。a表示首元素地址,将其强制转化成整型,整型+1 就是+1。将结果强制转化成整型指针赋给整型指针ptr2,由于当前环境下是小端存储,所以跳过的一个字节内容是01,将ptr解引用操作后,其指向的内容就是是0x20000000。
试题四
#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 a[3][2] = {1,3,5}; 而p指针存放的是整个第一行的地址。即a[0],这里求得是p[0]的值,其实求得是a[0][0]的值,也就是首行首元素1。
试题五
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,而-4通过%p格式打印,打印的是-4的补码,以十六进制格式打印也就是FFFFFFFC,%d格式打印依旧还是-4。
试题六
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;
}


解析:&aa+1,&aa,数组名和&结合表示整个数组。取出的是整个数组的地址,+1跳过整个数组。指向的是aa数组后的40字节的空间。也就是10后面一个整型指针大小的空间。*(ptr1-1)得到的是10。 (aa+1), 此时数组名表示第一行的地址,aa+1表示第二行的地址,解引用后得到的是第二行首元素的地址,也就是6的地址。(ptr2-1)得到就是5。
试题7
#include <stdio.h>
int main()
{char *a[] = {"work","at","alibaba"};char**pa = a;pa++;printf("%s\n", *pa);return 0;
}


解析:这里定义了字符指针数组a[],这里"work" “at” "alibaba"分别是三个常量字符串。定义二级指针变量pa并赋给它a数组名,这里pa指向a首字符的地址。pa指针++跳过一个元素,即指向第二个字符数组首字符’a’地址。
试题八
int main()
{char *c[] = {"ENTER","NEW","POINT","FIRST"};char**cp[] = {c+3,c+2,c+1,c};char***cpp = cp;printf("%s\n", **++cpp);printf("%s\n", *--*++cpp+3);printf("%s\n", *cpp[-2]+3);printf("%s\n", cpp[-1][-1]+1);return 0;
}


相关文章:
C语言——指针、数组的经典笔试题目
文章目录前言1.一维数组2.字符数组3.二维数组4.经典指针试题前言 1、数组名通常表示首元素地址,sizeof(数组名)和&数组名两种情况下,数组名表示整个数组。 2、地址在内存中唯一标识一块空间,大小是4/8字节。32位平台4字节,64位…...
【C语言】程序环境和预处理|预处理详解|定义宏(上)
主页:114514的代码大冒险 qq:2188956112(欢迎小伙伴呀hi✿(。◕ᴗ◕。)✿ ) Gitee:庄嘉豪 (zhuang-jiahaoxxx) - Gitee.com 文章目录 目录 文章目录 前言 一、程序的翻译环境和执行环境 二、详解编译和链接 1.翻译环境 2.编…...
上海霄腾自动化装备盛装亮相2023生物发酵展
上海霄腾自动化携液体膏体粉剂颗粒等灌装生产线解决方案亮相2023生物发酵展BIO CHINA2023生物发酵展,作为生物发酵产业一年一度行业盛会,由中国生物发酵产业协会主办,上海信世展览服务有限公司承办,2023第10届国际生物发酵产品与技…...
python+flask开发mock服务
目录 什么是mock? 什么时候需要用到mock? 如何实现? pythonflask自定义mock服务的步骤 一、环境搭建 1、安装flask插件 2、验证插件 二、mock案例 1、模拟 返回结果 2、模拟 异常响应状态码 3、模拟登录,从jmeter中获取…...
数据库(三)
第三章 MySQL库表操作 3.1 SQL语句基础 3.1.1 SQL简介 SQL:结构化查询语言(Structured Query Language),在关系型数据库上执行数据操作、数据检索以及数据维护的标准语言。使用SQL语句,程序员和数据库管理员可以完成如下的任务。 改变数据…...
2023软考纸质证书领取通知来了!
不少同学都在关注2022下半年软考证书领取时间,截止至目前,上海、湖北、江苏、南京、安徽、山东、浙江、宁波、江西、贵州、云南、辽宁、大连、吉林、广西地区的纸质证书可以领取了。将持续更新2022下半年软考纸质证书领取时间,请同学们在证书…...
Python requests模块
一、requests模块简介 requests模块是一个第三方模块,需要在python环境中安装: pip install requests 该模块主要用来发送 HTTP 请求,requests 模块比 urllib 模块更简洁。 requests模块支持: 自动处理url编码自动处理post请求…...
工业智能网关解决方案:物联网仓储环境监测系统
仓储是连接生产、供应和销售的中转系统,对于促进生产、提高效率有着重要的辅助作用。对于很多大型工厂或食品厂来说,需要对仓储环境进行严控的控制,以确保产品或食品的质量,避免不必要的产品损耗,提高产品存管的水平。…...
Linux进程线程管理
目录 存储管理 linux内存管理基本框架 系统空间管理和用户空间管理 进程与进程调度 进程四要素 用户堆栈的扩展 进程三部曲:创建,执行,消亡 系统调用exit(),wait() 内核中的互斥操作 存储管理 linux内存管理基本框架 系统空间管理…...
分享111个HTML电子商务模板,总有一款适合您
分享111个HTML电子商务模板,总有一款适合您 111个HTML电子商务模板下载链接:https://pan.baidu.com/s/1e8Wp1Rl9RaFrcW0bilIatg?pwdc97h 提取码:c97h Python采集代码下载链接:采集代码.zip - 蓝奏云 HTML5家居家具电子商务网…...
百度前端必会手写面试题整理
请实现一个 add 函数,满足以下功能 add(1); // 1 add(1)(2); // 3 add(1)(2)(3);// 6 add(1)(2, 3); // 6 add(1, 2)(3); // 6 add(1, 2, 3); // 6function add(...args) {// 在内部声明一个函数,利用闭包的特性保存并收集…...
ubuntu 安装支持GPU的Docker详细步骤
安装依赖项 sudo apt-get update sudo apt-get install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common 添加 Docker GPG 密钥 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo apt-key fingerpr…...
usbmon+tcpdump+wireshark USB抓包
文章目录usbmon抓包及配合wireshark解析usbmon抓包及配合wireshark解析 usbmon首先编译为内核模块,然后通过modprobe usbmon加载到linux sys文件系统中 rootroot-PC:~# modprobe usbmon 而后 linux系统下安装 tcpdump rootroot-PC:~# apt-get install tcpdump…...
【LeetCode】剑指 Offer 04. 二维数组中的查找 p44 -- Java Version
题目链接: https://leetcode.cn/problems/er-wei-shu-zu-zhong-de-cha-zhao-lcof/ 1. 题目介绍(04. 二维数组中的查找) 在一个 n * m 的二维数组中,每一行都按照从左到右 非递减 的顺序排序,每一列都按照从上到下 非递…...
TDengine 3.0.2.5 查询再优化!揭秘索引文件的工作原理
TDengine 3.0 虽然对底层做了大规模的优化重构,但是相对于数据文件的工作逻辑和 2.0 相比是整体保持不变的。本系列文章的主旨在于帮助用户深入理解产品,并且拥有基本的性能调试思路,从而获得更好的产品体验。本期文章会在讲解 TDengine 时序…...
蓝牙耳机哪个品牌性价比高?性价比高的无线蓝牙耳机
现如今耳机已经十分普及,大多数人会随身佩戴蓝牙耳机,相较于传统耳机,无线耳机不仅携带方便,舒适度上也更加出色。不过市面上的无线耳机种类繁多,很多朋友不知道该如何挑选,所以小编特意整理了一期性价比高…...
python的disutils创建分发包
python中的distutils包主要用创建共享包,安装包,在平时安装python模块的时候,使用的命令如下: python setup.py install 其实以上代码就是distuitls包提供的功能,直接使用setup.py来进行安装一个包,在用这种…...
【洛谷】P1195 口袋的天空
明显看出为最小生成树,那么:难点在哪里呢?if(cntn-k)//******{flag1;break;}为什么是cntn-k呢而不是k呢?!!!解释:(如果每个已经连在一起了就不能分开,不管多少…...
JavaScript高级程序设计读书分享之3章——3.5操作符
JavaScript高级程序设计(第4版)读书分享笔记记录 适用于刚入门前端的同志 目录 操作符 一元操作符 递增/递减操作符 一元加和减 布尔操作符 逻辑非 逻辑与 逻辑或 乘性操作符 乘法操作符 除法操作符 取模操作符 加性操作符 加法操作符 减法操作符 关系操作符 相等操…...
moveToCoordinateF3DconcatenateRotations
moveToCoordinate 演示视频: 注意:前提是3~6轴机器人机构且不是PickAndPlace 该方法_3D。Poses.moveToCoordinate 移动由 指定的对象,该对象 对应于支持的机器人配置之一,只要标识的机器人配置支持,其第一个动画指向指定坐标和指定旋转。这无需您定义姿势即可工作。 工…...
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...
零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
莫兰迪高级灰总结计划简约商务通用PPT模版
莫兰迪高级灰总结计划简约商务通用PPT模版,莫兰迪调色板清新简约工作汇报PPT模版,莫兰迪时尚风极简设计PPT模版,大学生毕业论文答辩PPT模版,莫兰迪配色总结计划简约商务通用PPT模版,莫兰迪商务汇报PPT模版,…...
PHP 8.5 即将发布:管道操作符、强力调试
前不久,PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5!作为 PHP 语言的又一次重要迭代,PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是,借助强大的本地开发环境 ServBay&am…...
【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案
目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后,迭代器会失效,因为顺序迭代器在内存中是连续存储的,元素删除后,后续元素会前移。 但一些场景中,我们又需要在执行删除操作…...
【Linux】自动化构建-Make/Makefile
前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具:make/makfile 1.背景 在一个工程中源文件不计其数,其按类型、功能、模块分别放在若干个目录中,mak…...
AxureRP-Pro-Beta-Setup_114413.exe (6.0.0.2887)
Name:3ddown Serial:FiCGEezgdGoYILo8U/2MFyCWj0jZoJc/sziRRj2/ENvtEq7w1RH97k5MWctqVHA 注册用户名:Axure 序列号:8t3Yk/zu4cX601/seX6wBZgYRVj/lkC2PICCdO4sFKCCLx8mcCnccoylVb40lP...
