当前位置: 首页 > news >正文

七天学会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.指针与一维二维数组的数值关系在这里插入图片描述

相关文章:

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

1.指针变量与普通变量 指针变量与普通变量是C语言中的两种不同类型的变量&#xff0c;它们有一些重要的区别和联系。 普通变量是一种存储数据的容器&#xff0c;可以直接存储和访问数据的值。&#xff1a; int num 10; // 定义一个整数型普通变量num&#xff0c;赋值为10在例…...

2023年腾讯云轻量服务器测评:16核 32G 28M 配置CPU测试

腾讯云轻量应用服务器16核32G28M配置优惠价3468元15个月&#xff08;支持免费续3个月/送同配置3个月&#xff09;&#xff0c;轻量应用服务器具有100%CPU性能&#xff0c;系统盘为380GB SSD盘&#xff0c;28M带宽下载速度3584KB/秒&#xff0c;月流量6000GB&#xff0c;折合每天…...

macos (M2芯片)搭建flutter环境

安装的版本3.13.4、电脑上没有安装过android studio、安装过brew 1.在终端运行sudo softwareupdate --install-rosetta --agree-to-license&#xff0c;下图展示安装成功的效果 2.下载以下安装包来获取最新的 stable Flutter SDK 3.解压&#xff0c;⚠️注意下载安装sdk的包名…...

Xilinx FPGA未使用管脚上下拉状态配置(ISE和Vivado环境)

文章目录 ISE开发环境Vivado开发环境方式1&#xff1a;XDC文件约束方式2&#xff1a;生成选项配置 ISE开发环境 ISE开发环境&#xff0c;可在如下Bit流文件生成选项中配置。 右键点击Generate Programming File&#xff0c;选择Process Properties&#xff0c; 在弹出的窗口选…...

数据结构---链表(java)

目录 1. 链表 2. 创建Node 3. 增加 4. 获取元素 5. 删除 6. 遍历链表 7. 查找元素是否存在 8. 链栈的实现 9. 链队的实现 1. 链表 数据存放在"Node"结点中 优点&#xff1a;不用考虑扩容和缩容的问题&#xff0c;实现了动态存储数据 缺点&#xff1a;没有…...

Qt --- Day02

实现效果&#xff1a; 点击登录&#xff0c;检验用户密码是否正确&#xff0c;正确则弹出消息框&#xff0c;点击ok转到另一个页面 不正确跳出错误消息框&#xff0c;默认选线为Cancel&#xff0c;点击Yes继续登录 点击Cancel跳出问题消息框&#xff0c;默认选项No&#xff0c…...

Redis 集合(Set)快速指南 | Navicat

Redis 支持通过多种数据类型来存储项目集合。其中&#xff0c;包括列表、集合和哈希。上周的博文介绍了列表&#xff08;List&#xff09;数据类型并重点介绍了一些用于管理列表&#xff08;List&#xff09;的主要命令。在今天的文章中&#xff0c;我们将转向关注集合&#xf…...

【华为云云耀云服务器L实例评测】- 云原生实践,快捷部署人才招聘平台容器化技术方案!

&#x1f935;‍♂️ 个人主页: AI_magician &#x1f4e1;主页地址&#xff1a; 作者简介&#xff1a;CSDN内容合伙人&#xff0c;全栈领域优质创作者。 &#x1f468;‍&#x1f4bb;景愿&#xff1a;旨在于能和更多的热爱计算机的伙伴一起成长&#xff01;&#xff01;&…...

【Java】泛型 之 什么是泛型

什么是泛型 泛型是一种“代码模板”&#xff0c;可以用一套代码套用各种类型。 在讲解什么是泛型之前&#xff0c;我们先观察Java标准库提供的ArrayList&#xff0c;它可以看作“可变长度”的数组&#xff0c;因为用起来比数组更方便。 实际上ArrayList内部就是一个Object[]…...

Python yaml 详解

文章目录 1 概述1.1 特点1.2 导入 2 对象2.1 字典2.2 数组2.3 复合结构 3 操作3.1 读取3.2 写入 1 概述 1.1 特点 yaml 文件是一种数据序列化语言&#xff0c;广泛用于配置文件、日志文件等特点&#xff1a; ① 大小写敏感。② 使用缩进表示层级关系。缩进时不允许使用 Tab 键…...

RabbitMQ消息可靠性(二)-- 消费者消息确认

一、消费者消息确认是什么&#xff1f; 在这种机制下&#xff0c;消费者在接收到消息后&#xff0c;需要向 RabbitMQ 发送确认信息&#xff0c;告知 RabbitMQ 已经接收到该消息&#xff0c;并已经处理完毕。如果 RabbitMQ 没有接收到确认信息&#xff0c;则会将该消息重新加入…...

【python第7课 实例,类】

文章目录 一、实例1.1实例的变量1.2实例方法1.3 构造方法1.4析构函数1.4预置实例属性&#xff1a; 二&#xff0c;类1.1类变量1.2类方法1.3静态方法1.4类属性的增删改查 一、实例 1.1实例的变量 使用示例 class dog:def __init__(self,k,c,a):self.kinds kself.color csel…...

RocketMQ源码解析(上)

一、ACL权限控制 应用场景&#xff1a; ​RocketMQ提供了针对队列、用户等不同维度的非常全面的权限管理机制。通常来说&#xff0c;RocketMQ作为一个内部服务&#xff0c;是不需要进行权限控制的&#xff0c;但是&#xff0c;如果要通过RocketMQ进行跨部门甚至跨公司的合作&…...

Webpack打包CSS文件,解决You may need an appropriate loader to handle this file type报错

在项目文件夹下创建webpack.config.js文件&#xff0c;该文件就是Webpack的配置文件 注意&#xff1a;该文件中遵循Node.js的代码格式规范 &#xff0c;需要对导出配置文件中的内容 Webpack在默认情况下只能打包js文件&#xff0c;如果我们希望他能够打包其他类型的文件&#…...

轮换对称性

二重积分 普通对称性–D关于 y x yx yx对称&#xff1a; ∬ D f ( x , y ) d σ { 2 ∬ D 1 f ( x , y ) d σ f ( x , y ) f ( y , x ) 0 f ( x , y ) − f ( y , x ) \iint_{D}f(x,y)d\sigma\begin{cases} 2\iint_{D_1}f(x,y)d\sigma\ \ \ \ \ \ f(x,y)f(y,x) \\ 0 \ \…...

【MySQL基础】--- 约束

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【MySQL学习专栏】&#x1f388; 本专栏旨在分享学习MySQL的一点学习心得&#xff0c;欢迎大家在评论区讨论&#x1f48c; 目录 一、什么…...

ROS2 的行为树 — 第 1 部分:解锁高级机器人决策和控制

一、说明 在复杂而迷人的机器人世界中&#xff0c;行为树&#xff08;BT&#xff09;已成为决策过程中不可或缺的一部分。它们提供了一种结构化、模块化和高效的方法来对机器人的行为进行编程。BT起源于视频游戏行业&#xff0c;用于控制非玩家角色&#xff0c;他们在机器人领域…...

kafka事务的详解

一 kafka事务的机制 1.1 kafka的事务机制 通过事务机制&#xff0c;KAFKA 可以实现对多个 topic 的多个 partition 的原子性的写入&#xff0c;即处于同一个事务内的所有消息&#xff0c;不管最终需要落地到哪个 topic 的哪个 partition, 最终结果都是要么全部写成功&#xf…...

Flutter Fair逻辑动态化架构设计与实现

本文的核心内容包括: 数据逻辑处理布局中的逻辑处理Flutter类型数据处理一、数据逻辑处理 我们接触的每一个Flutter界面,大多由布局和逻辑相关的代码组成。如Flutter初始工程的Counting Demo的代码: class _MyHomePageState extends State<MyHomePage> {// 变量 int…...

【每日一题】74. 搜索二维矩阵

74. 搜索二维矩阵 - 力扣&#xff08;LeetCode&#xff09; 给你一个满足下述两条属性的 m x n 整数矩阵&#xff1a; 每行中的整数从左到右按非递减顺序排列。每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target &#xff0c;如果 target 在矩阵中&#xff0c;返…...

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析

今天聊的内容&#xff0c;我认为是AI开发里面非常重要的内容。它在AI开发里无处不在&#xff0c;当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗"&#xff0c;或者让翻译模型 "将这段合同翻译成商务日语" 时&#xff0c;输入的这句话就是 Prompt。…...

django filter 统计数量 按属性去重

在Django中&#xff0c;如果你想要根据某个属性对查询集进行去重并统计数量&#xff0c;你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求&#xff1a; 方法1&#xff1a;使用annotate()和Count 假设你有一个模型Item&#xff0c;并且你想…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

Java 加密常用的各种算法及其选择

在数字化时代&#xff0c;数据安全至关重要&#xff0c;Java 作为广泛应用的编程语言&#xff0c;提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景&#xff0c;有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录&#xff0c;但是由于这个树组件的节点越来越多&#xff0c;导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多&#xff0c;导致的浏览器卡顿&#xff0c;这里很明显就需要用到虚拟列表的技术&…...

服务器--宝塔命令

一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行&#xff01; sudo su - 1. CentOS 系统&#xff1a; yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...

【Veristand】Veristand环境安装教程-Linux RT / Windows

首先声明&#xff0c;此教程是针对Simulink编译模型并导入Veristand中编写的&#xff0c;同时需要注意的是老用户编译可能用的是Veristand Model Framework&#xff0c;那个是历史版本&#xff0c;且NI不会再维护&#xff0c;新版本编译支持为VeriStand Model Generation Suppo…...

嵌入式学习之系统编程(九)OSI模型、TCP/IP模型、UDP协议网络相关编程(6.3)

目录 一、网络编程--OSI模型 二、网络编程--TCP/IP模型 三、网络接口 四、UDP网络相关编程及主要函数 ​编辑​编辑 UDP的特征 socke函数 bind函数 recvfrom函数&#xff08;接收函数&#xff09; sendto函数&#xff08;发送函数&#xff09; 五、网络编程之 UDP 用…...

【FTP】ftp文件传输会丢包吗?批量几百个文件传输,有一些文件没有传输完整,如何解决?

FTP&#xff08;File Transfer Protocol&#xff09;本身是一个基于 TCP 的协议&#xff0c;理论上不会丢包。但 FTP 文件传输过程中仍可能出现文件不完整、丢失或损坏的情况&#xff0c;主要原因包括&#xff1a; ✅ 一、FTP传输可能“丢包”或文件不完整的原因 原因描述网络…...