当前位置: 首页 > 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;返…...

软件测试进大厂,拿高薪,怎么做?看这里!

有些同学大学专业不对口&#xff0c;但有想进大厂想拿高薪心&#xff0c;只要你有想法&#xff0c;那就一定有实现的方法。 俗话说&#xff1a;“世间无难事&#xff0c;只怕有心人”。仔细思索一下&#xff0c;哪家大厂能缺软件测试这一重要职位。相对大学所学专业而言&#…...

【读书笔记】基于世界500强的高薪实战Kubernetes课程

第1章 课程简介&&自我介绍 1-1 自我介绍 1-2 课程大纲内容介绍 1-3 课程更新通知 第2章 K8s必备知识-Docker容器基础入门 2-1 课程介绍 2-2 docker容器介绍 2-3 docker优缺点 2-4 安装和配置docker 2-5 修改内核参数 2-6 配置镜像加速器 2-7 配置常用镜像加…...

【Java 基础篇】Java并发包详解

多线程编程是Java开发中一个重要的方面&#xff0c;它能够提高程序的性能和响应能力。然而&#xff0c;多线程编程也伴随着一系列的挑战&#xff0c;如线程安全、死锁、性能问题等。为了解决这些问题&#xff0c;Java提供了一套强大的并发包。本文将详细介绍Java并发包的各个组…...

MYSQL存储引擎基础知识介绍

下面重点介绍几种常用的存储引擎,并对比各个存储引擎之间的区别&#xff0c;以帮助读者理解 不同存储引擎的使用方式。 MyISAM MyISAM是 MySQL的默认存储引擎。MyISAM不支持事务、也不支持外键&#xff0c;其优势是访 问的速度快&#xff0c;对事务完整性没有要求或者以 SEL…...

vue学习之element-ui组件集成

1. element-ui 链接 https://element.eleme.cn/#/zh-CN 2. element-ui 安装 cnpm install element-ui3. 创建项目 https://blog.csdn.net/qq_36940806/article/details/132921688?spm=1001.2014.3001.5502 4. 引入element库 /src/main.js 引入 element-uiimport Vue from…...

如何通过百度SEO优化提升网站排名(掌握基础概念,实现有效优化)

随着互联网的发展&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;成为了网站优化中不可或缺的一部分。在中国&#xff0c;百度搜索引擎占据着主导地位&#xff0c;因此掌握百度SEO概念和优化技巧对网站的排名和曝光非常重要。 百度SEO排名的6个有效方法&#xff1a; 首…...

Golang 字符串

目录 1. Golang 字符串1.1. 基础概念1.2. 字符串编码1.3. 遍历字符串1.4. 类型转换1.5. 总结1.6. String Concatenation (字符串连接)1.6.1. Using the operator1.6.2. Using the operator1.6.3. Using the Join method1.6.4. Using Sprintf method1.6.5. Using Go string Bu…...

python应用中使用了multiprocessing多进程,使用pyinstaller打包出来的程序可能产生多个窗口

问题现象 我用pyside&#xff08;类似pyqt&#xff09;开发了一个应用程序。直接使用pycharm运行&#xff0c;一切都正常。但当我使用pyinstaller将它打包之后&#xff0c;再去运运行&#xff0c;发现窗口总是产生多个。 问题分析 直接运行没有问题&#xff0c;那么问题肯定…...

数据结构与算法——13.队列的拓展

这篇文章主要讲一下双端队列&#xff0c;优先队列&#xff0c;阻塞队列等队列的拓展内容。 目录 1.队列拓展概述 2.双端队列的链表实现 3.双端队列的数组实现 4.优先队列无序数组实现 5.阻塞队列 6.总结 1.队列拓展概述 首先来看一张图&#xff0c;来大致了解一下他们的…...

机器学习入门教学——损失函数(交叉熵法)

1、前言 我们在训练神经网络时&#xff0c;最常用到的方法就是梯度下降法。在了解梯度下降法前&#xff0c;我们需要了解什么是损失(代价)函数。所谓求的梯度&#xff0c;就是损失函数的梯度。如果不知道什么是梯度下降的&#xff0c;可以看一下这篇文章&#xff1a;机器学习入…...

建设银行指定网站/营销型网站和普通网站

作者: Jooyer, 时间: 2018.07.08 Github地址,欢迎点赞,fork 大家看到GIF,就知道,其自定义很是简单,为何还要说一说呢? 主要是 github 上有很多大佬写的很好的库,只是功能多了,文件就多了,很多时候引入一个第三方,还得考虑方法数,库的大小等,而且有些时候,我们不需要那么多功能…...

自己怎样建网站做微商/河北百度seo关键词

在helm中安装nginx&#xff0c;前面试了很多次由于仓库失效等各种原因都没有安装成功&#xff0c;但是这个名字(testnginx)可能是已经存在了&#xff0c;所以出现下面的错误时换个名字即可。 [rootk8smaster bin]# helm install testnginx apphub/nginx Error: INSTALLATION F…...

未及时取消网站备案/著名营销策划公司

Swoole 如何处理高并发①对Reactor模型介绍我们都知道IO复用异步非阻塞程序使用的是经典的Reactor模型&#xff0c;Reactor就是反应堆的意思&#xff0c;也就是说它本身不处理任何数据收发。只是可以监视一个socket(比如管道、eventfd、信号)句柄的事件变化。Reactor只作为一个…...

wordpress twenty thirteen/惠州seo推广优化

74HC595驱动4位7段数码管 1、74HC595介绍 74HCT595 是一个 8 位串行输入/串行或并行输出移位寄存器,带有一个存储寄存器和三态输出。移位寄存器和存储寄存器都有独立的时钟。该器件具有串行输入 (DS) 和串行输出 (Q7S) 以启用级联和异步复位 MR 输入。 MR 上的低电平将复位移…...

网站内容维护/短信营销

Description Input 有若干行&#xff0c;每行三个数字 X;Y;Z 代表一组数据&#xff0c;表示立方体的长宽高加 1 Output 第 i 行数据输出Case#i: 第i组数据的答案 Sample Input 2 1 22 2 2Sample Output Case #1: 4Case #2: 15HINT x,y,z<1000 Source 郑州培训D3考试…...

六枝网站建设/天津做网站的公司

一、Spring面试题 1、Spring 在ssm中起什么作用&#xff1f; 答&#xff1a; Spring&#xff1a;Spring轻量级框架。 作用&#xff1a;Bean工厂&#xff0c;用来管理Bean的生命周期和框架集成。 Spring框架的两大核心&#xff1a; ①. IOC/DI(控制反转/依赖注入) &#xf…...