七天学会C语言-第六天(指针)

在这里插入图片描述

1.指针变量与普通变量

指针变量与普通变量是C语言中的两种不同类型的变量,它们有一些重要的区别和联系。
普通变量是一种存储数据的容器,可以直接存储和访问数据的值。:

int num = 10; // 定义一个整数型普通变量num,赋值为10

在例子中,变量num是一个普通整数变量,它直接存储了值10。
指针变量是一种特殊类型的变量,它存储的是内存地址(即某个数据在计算机内存中的位置)。指针变量本身不直接存储数据的值,而是存储数据的地址,通过这个地址可以访问实际存储在该地址上的数据。

int *ptr; // 定义一个整数型指针变量ptr
int num = 10; // 定义一个整数型普通变量num,赋值为10
ptr = # // 将ptr指向num的地址

在例子中,ptr是一个整数型指针变量,它存储了变量num的地址。通过ptr可以访问和修改num的值

*ptr = 20; // 通过ptr修改了num的值,将其改为20

这里的*ptr表示通过指针ptr访问所指向的内存地址上的数据。

例 1:输入两个整数,按先大后小的顺序输出这两个数。请用指针来编程

用指针的编写方法:

#include<stdio.h> int main() {int a, b, *p, *q, t;printf("请输入两个整数:\n");scanf("%d,%d", &a, &b); // 输入两个整数p = &a; // p指向a的地址q = &b; // q指向b的地址if (a < b) {t = *p; // 将p指向的值赋值给t*p = *q; // 将q指向的值赋值给p,实现交换*q = t; // 将t的值赋值给q}printf("较大数为%d  较小数为%d\n", a, b); // 输出交换后的结果return 0;
}

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

简单总结:

  • 普通变量直接存储数据的值。
  • 指针变量存储数据的地址,通过地址可以访问实际数据。
  • 指针变量通常需要初始化,指向某个有效的内存地址。
  • 指针变量使用*操作符来访问所指向的数据。

2.指针变量与一维数组

指针变量与一维数组有着密切的关系,因为数组名本身就是一个指针。以下是一些关于指针变量与一维数组的重要概念和用法:

  1. 指针与数组名:数组名是指向数组第一个元素的指针。例如,如果有一个整型数组 arr,则 arr 等价于 &arr[0],都表示数组第一个元素的地址。
  2. 指针遍历数组:可以使用指针遍历数组的元素。通过递增指针的值,可以访问数组的不同元素。
  3. 指针作为函数参数:可以将数组的首地址传递给函数,从而在函数内部操作整个数组。

例 1:一个整型数组里的 5 个元素由键盘输入,将每个元素变为原来的两倍后再依次输出。
之前的编写方法:

#include <stdio.h>int main() {int a[5];int i;printf("请输入 5 个整数:\n");for (i = 0; i < 5; i++) {scanf("%d", &a[i]);a[i] = a[i] * 2; // 在这里将每个元素加倍}printf("加倍后的各整数为:\n");for (i = 0; i < 5; i++) {printf("%d\t", a[i]);}printf("\n");return 0;
}

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

用指针的编写方法:

#include <stdio.h>int main() {int a[5];int i, *p;p = &a[0];printf("请输入 5 个整数:\n");for (i = 0; i < 5; i++) {scanf("%d", p + i);*(p + i) = *(p + i) * 2; // 在这里将每个元素加倍}printf("加倍后的各整数为:\n");for (i = 0; i < 5; i++) {printf("%d\t", *(p + i));}printf("\n");return 0;
}

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

简单总结:
&数组名[某数] 相当于 数组名+某数
数组名[某数] 相当于 *(数组名+某数)

3.指针变量与一维数组相关函数

  1. 指针与数组名的关系: 在C语言中,数组名本身就是一个指针,它指向数组的第一个元素的地址。例如,如果有一个整数数组 int arr[5],那么 arr 就是指向 arr[0] 的指针。
  2. 指针遍历数组: 通过使用指针,我们可以遍历整个数组。例如,可以使用指针 int *ptr 来访问数组的元素,其中 ptr 初始化为数组的首地址,然后逐渐递增以访问数组的不同元素。
  3. 指针与数组的传递: 函数可以接受指向数组的指针作为参数,这样可以避免将整个数组复制到函数中。这对于处理大型数组非常有用,因为它减少了内存和时间开销。例如,函数原型可以是 void myFunction(int *arr, int size),其中 arr 是指向数组的指针,size 是数组的大小。
  4. 数组作为函数返回值: 函数可以返回指向数组的指针。这在某些情况下很有用,例如在函数内部动态分配数组内存,然后返回指向该数组的指针。
  5. 使用指针函数修改数组: 指针函数可以用来修改传递给它们的数组的内容,而无需返回任何值。这使得函数能够在调用函数中直接修改数组的元素。
  6. 字符串和字符数组: 字符串在C语言中是字符数组,它们以空字符 '\0' 结尾。通过使用指向字符的指针,我们可以对字符串进行各种操作,如拷贝、连接、比较等。

例 1:有两个小组,分别有 5 名学生和 10 名学生。请编程输入这些学生的成绩,并调用一个 aver 函数求这两个小组的平均分。
形参是数组名,实参是数组名:

#include <stdio.h>float aver(float a[], int n);int main()
{float zu1[5], zu2[10];int i;printf("请输入第 1 组的学生成绩:\n");for (i = 0; i <= 4; i++){scanf("%f", &zu1[i]);}printf("请输入第 2 组的学生成绩:\n");for (i = 0; i <= 9; i++){scanf("%f", &zu2[i]);}printf("第 1 组平均分是%.2f\n", aver(zu1, 5));printf("第 2 组平均分是%.2f\n", aver(zu2, 10));return 0;
}float aver(float a[], int n)
{float sum = a[0], pingjunshu;int i;for (i = 1; i < n; i++){sum = sum + a[i];}pingjunshu = sum / n;return (pingjunshu);
}

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

形参是指针变量,实参是数组名:

#include <stdio.h>float aver(float *p, int n);int main()
{float zu1[5], zu2[10];int i;printf("请输入第 1 组的学生成绩:\n");for (i = 0; i < 5; i++){scanf("%f", &zu1[i]);}printf("请输入第 2 组的学生成绩:\n");for (i = 0; i < 10; i++){scanf("%f", &zu2[i]);}printf("第 1 组平均分是%.2f\n", aver(zu1, 5));printf("第 2 组平均分是%.2f\n", aver(zu2, 10));return 0;
}float aver(float *p, int n)
{float sum = *p, pingjunshu;int i;for (i = 1; i < n; i++){sum = sum + *(p + i);}pingjunshu = sum / n;return (pingjunshu);
}

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

形参是指针变量,实参是指针变量:

#include <stdio.h>float aver(float *p, int n);int main()
{float zu1[5], zu2[10];int i;printf("请输入第 1 组的学生成绩:\n");for (i = 0; i < 5; i++){scanf("%f", &zu1[i]);}printf("请输入第 2 组的学生成绩:\n");for (i = 0; i < 10; i++){scanf("%f", &zu2[i]);}printf("第 1 组平均分是%.2f\n", aver(zu1, 5));printf("第 2 组平均分是%.2f\n", aver(zu2, 10));return 0;
}float aver(float *p, int n)
{float sum = *p, pingjunshu;int i;for (i = 1; i < n; i++){sum = sum + *(p + i);}pingjunshu = sum / n;return (pingjunshu);
}

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

4.指针变量与二维数组

  1. 二维数组的内存结构: 二维数组在内存中是连续存储的一块区域,其元素按行优先的顺序排列。这意味着二维数组的每一行都存储在连续的内存块中,而指向下一行的指针则指向下一个连续内存块的起始地址。
  2. 指针与二维数组的关系: 二维数组名本身是一个指向数组的指针。例如,如果有一个二维整数数组 int arr[3][4],那么 arr 就是一个指向整数数组的指针,它指向数组的第一行。
  3. 使用指针访问二维数组元素: 可以使用指向二维数组的指针来访问数组元素。例如,可以使用 int (*ptr)[4] 来声明一个指向 arr 的指针,然后通过 ptr 来访问数组的不同元素,其中 4 表示每行的元素个数。
  4. 二维数组作为函数参数: 函数可以接受指向二维数组的指针作为参数。这对于处理二维数组非常有用,因为它可以减少数据复制的开销。例如,函数原型可以是 void myFunction(int (*arr)[4], int rows, int cols),其中 arr 是指向二维数组的指针,rowscols 分别表示数组的行数和列数。
  5. 指针与多维数组的关系: 指针与多维数组的关系不仅限于二维数组,还可以用于更高维度的数组。例如,可以声明一个指向三维数组的指针,以便访问三维数组的元素。
  6. 使用指针遍历二维数组: 可以使用指针来遍历整个二维数组,通过逐行或逐列访问元素。这种方法在处理二维数据集时非常有用。

例 1:已知整型二维数组 a[3][4]={1,2,3,4,5,6,6,5,4,3,2,1}。
请用指针变量输出二维数组各元素的值。

#include <stdio.h>int main() {int a[3][4] = {{1, 2, 3, 4}, {5, 6, 6, 5}, {4, 3, 2, 1}};int *p;for (p = a[0]; p <= a[0] + 11; p++) {if ((p - a[0]) % 4 == 0) {printf("\n");}printf("%d\t", *p);}printf("\n");return 0;
}

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

简单总结
&数组名[数 α][数 β] 相当于 数组名[数 α]+数 β
也相当于 数组名[0]+α*列数+β
数组名[数 α][数 β] 相当于 *(数组名[数 α]+数 β)

5.指针变量与二维数组相关函数

1.指针变量与二维数组的关系: 在C语言中,一个二维数组的名称实际上是指向数组的指针。例如,对于 int arr[3][4] 这个二维数组,arr 是一个指向整数数组的指针,它指向数组的第一行。这一点使得指针变量能够与二维数组紧密合作。
2.传递二维数组给函数: 函数可以接受指向二维数组的指针作为参数。这样可以避免复制整个数组,提高了程序的效率。例如,可以使用以下函数原型来接受一个二维整数数组:

void processArray(int (*arr)[4], int rows, int cols);

这里,arr 是一个指向 int[4] 数组的指针,rowscols 分别表示数组的行数和列数。
3. 函数内使用指针处理二维数组: 在函数内部,可以使用指针来处理传递进来的二维数组。通过指针,可以访问和修改数组元素,进行各种操作。
4. 指向二维数组的指针变量: 可以声明指向二维数组的指针变量,以便遍历整个二维数组。例如,int (*ptr)[4] 表示一个指向包含4个整数的数组的指针,可以用它来访问数组元素。
5. 多维数组的通用性: 这种技术不仅适用于二维数组,还可以扩展到更高维度的数组。可以声明指向多维数组的指针,以便处理多维数据结构。
6. 优化内存使用: 使用指针和相关函数可以减少内存使用,特别是在处理大型数据集时。这有助于提高程序的性能和效率。

例 1:有 3 名学生学习 4 门课,学生一的成绩分别是 65、67、70、60,学生二的分别是 80、87、90、81,学生三的分别是 90、99、93、98。将上述成绩输入二维数组,并通过函数输出三人的总平均分。

形参是指针变量,实参是数组名:

#include <stdio.h>void shuchu(float *p, int n);int main() {float fenshu[3][4] = {{65, 67, 70, 60}, {80, 87, 90, 81}, {90, 99, 93, 98}};// 传递二维数组的地址shuchu(*fenshu, 12);return 0;
}void shuchu(float *p, int n) {float sum = 0;int i;for (i = 0; i < n; i++) {sum += *(p + i);}printf("三人的总平均分为%f\n", sum / n);
}

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

形参是指针变量,实参是指针变量:

#include <stdio.h>void shuchu(float *p, int n);int main() {float fenshu[3][4] = {{65, 67, 70, 60}, {80, 87, 90, 81}, {90, 99, 93, 98}};int *q;q = &fenshu[0][0];shuchu(q, 12);return 0;
}void shuchu(float *p, int n) {float sum = 0;int i;for (i = 0; i < n; i++) {sum += *(p + i);}printf("三人的总平均分为%f\n", sum / n);
}

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

6.指针变量指向二维数组的行变量

例 1:请用指针变量指向二维数组的行变量的方法,将在这里插入图片描述
中某行某列的值输出来。

#include <stdio.h>int main() {int a[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};int (*p)[3]; // 声明指向具有3个整数的数组的指针p = a;int i, j, hang, lie;printf("请输入行数与列数:\n");scanf("%d,%d", &hang, &lie); // 修正此处i = hang - 1;j = lie - 1;printf("%d行%d列的元素为%d\n", hang, lie, *(*(p + i) + j));return 0;
}

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

7.用指向二维数组行变量的指针变量做形参

例 1:有 3 名学生学习 4 门课,学生一的成绩分别是 65、67、70、60,学生二的分别是 80、87、90、81,学生三的分别是 90、99、93、98。将上述成绩存入二维数组,并通过函数输出第 2 个学生的各科成绩。

#include <stdio.h>void shuchu(float (*p)[4], int n);int main() {float fenshu[3][4] = {{65, 67, 70, 60}, {80, 87, 90, 81}, {90, 99, 93, 98}};shuchu(fenshu, 2);return 0;
}void shuchu(float (*p)[4], int n) {int i;printf("第%d个学生的各科成绩是:\n", n);for (i = 0; i <= 3; i++)printf("%f\t", *(*(p + n - 1) + i));printf("\n");
}

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

8.指针变量与字符串

字符串表示:字符串是字符数组的一种形式,以空字符 ‘\0’ 结尾。例如,“Hello” 在内存中表示为字符数组 {‘H’, ‘e’, ‘l’, ‘l’, ‘o’, ‘\0’}。
字符指针:指针变量可以用来指向字符串的首字符。例如,char str = “Hello”; 将 str 指向字符串 “Hello” 的首字符 ‘H’。
字符串输入:使用 scanf 或 fgets 等函数可以从用户输入或文件中读取字符串,并将其存储在字符数组中。
字符串输出:使用 printf 函数可以将字符串打印到标准输出或文件。
字符串处理:指针变量可以用来遍历和操作字符串中的字符。你可以使用指针来查找字符串中的特定字符,拷贝字符串,连接字符串,比较字符串等。

以前的编写方法:

#include<stdio.h>int main() {int i;char a[] = {'I', ' ', 'a', 'm', ' ', 'm', 'u', 'c', 'h', 'e', 'n', '!', '!'};char b[10086];for (i = 0; a[i] != '\0'; i++) {b[i] = a[i];}b[i] = '\0'; // 添加终止字符printf("字符串 b 是:\n");for (i = 0; b[i] != '\0'; i++) {printf("%c", b[i]);}printf("\n");return 0;
}

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

指向字符串的指针写法:

#include <stdio.h>int main() {int i;char a[] = {'I', ' ', 'a', 'm', ' ', 'm', 'u', 'c', 'h', 'e', 'n', '!', '!'};char b[10086];char *p, *q;p = &a[0];q = &b[0];for (i = 0; *(p + i) != '\0'; i++)*(q + i) = *(p + i);*(q + i) = '\0';printf("字符串 b 是:\n");for (i = 0; *(q + i) != '\0'; i++)printf("%c", *(q + i));printf("\n");return 0;
}

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

简单总结:
&数组名[某数] 相当于 数组名+某数
数组名[某数] 相当于 *(数组名+某数)

9.指针变量与字符串相关函数

例 1:定义字符串 a 为“I am muchen!!”,将其复制到字符串 b 里, 并输出字符串 b。请调用函数编写此程序。
以前的编写方法(形参是数组名,实参是数组名):

#include <stdio.h>void fuzhi(char yuanlaide[], char xinde[]); // 声明函数int main() {int i;char a[] = {'I', ' ', 'a', 'm', ' ', 'm', 'u', 'c', 'h', 'e', 'n', '!', '!'};char b[10086];printf("字符串 b 是:\n");// 调用函数来复制字符串fuzhi(a, b);for (i = 0; b[i] != '\0'; i++)printf("%c", b[i]);printf("\n");return 0;
}// 定义函数来复制字符串
void fuzhi(char yuanlaide[], char xinde[]) {int i;for (i = 0; yuanlaide[i] != '\0'; i++) xinde[i] = yuanlaide[i];xinde[i] = '\0'; // 添加字符串结束符
}

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

形参是指针变量,实参是数组名:

#include <stdio.h>void fuzhi(char *yuanlaidep, char *xindep); // 声明函数int main() {int i; // 声明变量 ichar a[] = {'I', ' ', 'a', 'm', ' ', 'm', 'u', 'c', 'h', 'e', 'n', '!', '!'};char b[10086];printf("字符串 b 是:\n");// 调用函数来复制字符串fuzhi(a, b);for (i = 0; b[i] != '\0'; i++)printf("%c", b[i]);printf("\n");return 0;
}// 定义函数来复制字符串
void fuzhi(char *yuanlaidep, char *xindep) {int i;for (i = 0; *(yuanlaidep + i) != '\0'; i++)*(xindep + i) = *(yuanlaidep + i);*(xindep + i) = '\0'; // 添加字符串结束符
}

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

10.指针变量与函数

例 1:输入两个整数,用 max 函数求二者中的较大数并输出。
以前的编写方法:

#include <stdio.h>int max(int x, int y);int main() {int a, b;printf("请输入两个整数:\n");scanf("%d,%d", &a, &b);printf("较大数为%d\n", max(a, b));return 0;
}int max(int x, int y) {return (x > y ? x : y);
}

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

改成用指针指向函数:

#include <stdio.h>int max(int x, int y);int main() {int a, b, maxValue;int (*p)(int, int);p = max;printf("请输入两个整数:\n");scanf("%d,%d", &a, &b);maxValue = p(a, b); // 直接调用函数指针printf("较大数为%d\n", maxValue);return 0;
}int max(int x, int y) {return (x > y ? x : y);
}

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

例 2:输入两个整数,然后让用户选择 1 或 2 ,选 1 时调用 max函数输出二者中的较大数,选 2 时调用 min 函数输出二者中的较小数。

宿舍要断电了,这个代码先存着,后续补!

11.返回指针值的函数

例 1:有 3 名学生学习 4 门课,学生一的成绩分别是 65、67、70、60,学生二的分别是 80、87、90、81,学生三的分别是 90、99、93、98。用指针函数来变成,要求在用户输入学生序号以后,能输出该学生的各科成绩。
在这里插入图片描述

#include <stdio.h>float *find(float (*row)[4], int n);int main() {float scores[3][4] = {{65, 67, 70, 60}, {80, 87, 90, 81}, {90, 99, 93, 98}};float *ptr;int studentNumber, i;printf("Enter the student number: ");scanf("%d", &studentNumber);printf("Grades for student %d:\n", studentNumber);ptr = find(scores, studentNumber - 1);for (i = 0; i <= 3; i++) {printf("%.2f\t", *(ptr + i));}printf("\n");return 0;
}float *find(float (*row)[4], int n) {float *result;result = *(row + n);return result;
}

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

12.指针与一维二维数组的数值关系在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTTP 协商缓存 ETag、If-None-Match

&#xff08;1&#xff09;浏览器第一次跟服务器请求一个资源&#xff0c;服务器在返回这个资源的同时&#xff0c;在respone header加上ETag。 ETag是服务器根据当前请求的资源生成的一个唯一标识。 这个唯一标识是一个字符串&#xff0c;只要资源有变化这个串就不同&#xff…

一文带你实现从PDF到Word文件的相互转换

一文带你实现从PDF到Word文件的相互转换 01. 前期准备 模块安装 pip install pdf2docx or使用国内镜像源进行安装&#xff08;清华的镜像源&#xff09; pip install pdf2docx -i https://pypi.tuna.tsinghua.edu.cn/simple 02. 模块介绍 pdf2docx是一个Python模块&#xff0…

荣湃隔离放大器Pai8300 5.0kVRMS完美代替TI AMC1301

深力科推出了用于电流检测的隔离放大器Pai8300&#xff0c;实现对电流快速、精确的检测。Pai8300采用全新架构&#xff0c;叠加荣湃专利智能分压技术&#xff0c;保证低功耗&#xff0c;高精度和良好的隔离性能&#xff0c;广泛应用于电机驱动&#xff0c;逆变器&#xff0c;变…

Intel酷睿和AMD锐龙

Intel酷睿系列&#xff0c;主要分i3、i5、i7、i9 如&#xff1a;Intel 酷睿i5 10210U i5&#xff1a;品牌修饰符。 10&#xff1a;代次指示符。 210&#xff1a;sku编号。 常见后缀&#xff1a; G1-G7&#xff1a;集显等级。 U&#xff1a;低功耗。 H&#xff1a;标压版…

AI创作工具-AI创作工具技术解读

创作是广告、文章、小说、社交媒体内容等各个领域的关键&#xff0c;但它通常需要创作者花费大量时间和精力&#xff0c;思考、编写和编辑内容。有时候&#xff0c;创作者可能面临写作灵感枯竭、时间紧迫或需要大量内容的情况。 添加图片注释&#xff0c;不超过 140 字&#xf…

2023华为杯数学建模研赛E题全解析

2023华为杯数学建模研赛E题解析&#xff0c;完整版已出!!! 包含所有模型、代码、结果&#xff0c;39页技术文档&#xff0c;详细内容如下! 免费版链接已放在下面&#xff0c;需要的同学可以直接自取~ 【云顶数模】2023研究生数学建模免费链接&#xff1a; https://pan.baid…

Java反序列化和php反序列化的区别

文章目录 PHP反序列化漏洞反序列化漏洞什么是反序列化漏洞&#xff1f;修改序列化后的数据&#xff0c;目的是什么&#xff1f; Java反序列化漏洞反序列化漏洞 PHP反序列化漏洞 序列化存在的意义是为了传输数据/对象&#xff0c;类是无法直接进行传输的。通过序列化后转换为字…

数据结构-----栈(栈的初始化、建立、入栈、出栈、遍历、清空等操作)

目录 前言 栈 1.定义 2.栈的特点 3.栈的储存方式 3.1数组栈 3.2链栈 4.栈的基本操作&#xff08;C语言&#xff09; 4.1初始化 4.2判断是否满栈 4.3判断空栈 4.4 入栈 4.5 出栈 4.6获取栈顶元素 4.7遍历栈 4.8清空栈 完整代码示例 前言 大家好呀&#xff01;今天我…

python使用websocket实现多端数据同步,多个websocket同步消息,断开链接自动清理

我使用的是flask_sock这个模块&#xff0c;我的使用场景是&#xff1a;可以让数据多端实时同步。在游戏控制后台和游戏选手的ipad上都可以实时调整角色的技能和点数什么的&#xff0c;所以需要这样的一个功能来实现数据实时同步。 下面是最小的demo案例&#xff1a; from fla…

【小沐学NLP】关联规则分析Apriori算法(Mlxtend库,Python)

文章目录 1、简介2、Mlxtend库2.1 安装2.2 功能2.2.1 User Guide2.2.2 User Guide - data2.2.3 User Guide - frequent_patterns 2.3 入门示例 3、Apriori算法3.1 基本概念3.2 apriori3.2.1 示例 1 -- 生成频繁项集3.2.2 示例 2 -- 选择和筛选结果3.2.3 示例 3 -- 使用稀疏表示…

UE4 C++ 使用第三方库(动态库) 详解

目录 1 代码共享的方式2 使用三方库2.1 准备一个动态库&#xff08;包含.h;.lib;.dll&#xff09;2.2 创建一个UE C工程2.3 配置三方库 1 代码共享的方式 在使用三方库之前&#xff0c;先介绍一下三方库的由来&#xff0c;以及为什么需要三方库。就从程序员共享代码成果开始讲述…

IP 协议

IP协议格式 四位版本号 用来表示IP协议的版本,现有的IP协议只有两个版本,IPv4,IPv6,其他版本只在实验室中存在,没有大规模商用 四位首部长度 设定和TCP一样,IP报头是可变长的,IP报头又是带有选项(可以有,可以没有)的,这里的单位也是4个字节,也就是最大有16*464个字节的长度 …

PHP8中调换数组中的键值和元素值-PHP8知识详解

在php8中使用array_flip()函数可以调换数组中的键值和元素值。 在PHP8中使用array_flip()函数可以调换数组中的键值和元素值&#xff0c;示范代码如下&#xff1a; <?php$stu array("子涵"> 001,"欣怡"> 002,"梓涵">003,"晨曦…

华为云云耀云服务器L实例评测|centos7.9在线使用cloudShell下载rpm解压包安装mysql并开启远程访问

文章目录 ⭐前言⭐使用华为cloudShell连接远程服务器&#x1f496; 进入华为云耀服务器控制台&#x1f496; 选择cloudShell ⭐安装mysql压缩包&#x1f496; wget下载&#x1f496; tar解压&#x1f496; 安装步骤&#x1f496; 初始化数据库&#x1f496; 修改密码&#x1f4…

外卖小程序开发指南:打造完美的点餐体验

第一步&#xff1a;项目设置和初始化 首先&#xff0c;您需要选择一个适合您的开发平台&#xff0c;例如微信小程序、支付宝小程序或其他移动应用平台。接下来&#xff0c;创建一个新的小程序项目&#xff0c;并初始化所需的文件和目录。 示例代码&#xff08;微信小程序&am…

02_elasticsearch 核心概念

02_elasticsearch 核心概念 1、lucene和elasticsearch的前世今生2、elasticsearch的核心概念 1、lucene和elasticsearch的前世今生 1、lucene和elasticsearch的前世今生 lucene&#xff1a;最先进、功能最强大的搜索库。但是直接基于lucene开发&#xff0c;非常复杂&#xff…

pcl--第十节 点云曲面重建

曲面重建技术在逆向工程、数据可视化、机器视觉、虚拟现实、医疗技术等领域中得到了广泛的应用 。 例如&#xff0c;在汽车、航空等工业领域中&#xff0c;复杂外形产品的设计仍需要根据手工模型&#xff0c;采用逆向工程的手段建立产品的数字化模型&#xff0c;根据测量数据建…

透视俄乌网络战之四:西方科技巨头的力量

透视俄乌网络战之一&#xff1a;数据擦除软件 透视俄乌网络战之二&#xff1a;Conti勒索软件集团&#xff08;上&#xff09; 透视俄乌网络战之三&#xff1a;Conti勒索软件集团&#xff08;下&#xff09; 西方科技巨头的力量 1. Palantir2. SpaceX3. Maxar Technologies4. Cl…

【虚幻引擎】UE5 VLC接入网络监控、视频直播、网络直播支持RTSP、RTMP

一、如何更新自己的插件匹配自己想要的UE版本 我们在网上下载的插件一般是UE4版本的插件&#xff0c;这个时候就需要我们自己去修改编译&#xff0c;接下来教大家修改插件来适配自己的引擎。 如果不想自己编译代码&#xff0c;可以直接找我拿编译好的UE5.0、UE5.1、UE5.2的插件…

【算法思想】排序

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…