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

news2025/1/12 17:53:06

在这里插入图片描述

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; // 声明变量 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 *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.coloradmin.cn/o/1030095.html

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

相关文章

【算法训练-二叉树 四】【对称与翻转】对称二叉树、翻转二叉树

废话不多说&#xff0c;喊一句号子鼓励自己&#xff1a;程序员永不失业&#xff0c;程序员走向架构&#xff01;本篇Blog的主题是【二叉树的形态变化】&#xff0c;使用【二叉树】这个基本的数据结构来实现&#xff0c;这个高频题的站点是&#xff1a;CodeTop&#xff0c;筛选条…

后端思维:通过代码去重,做一个后端通用模板

目录 后端思维 1. 优化前的例子 2. 抽取公用方法去重 3. 反射对比字段 4.Lambda函数式泛型 5. 继承多态. 6. 模板方法 6.1 定义对比模板的骨架 6.2 模板的方法逐步细化 6.3 不同对比子类 7. 工厂模式 模板方法 策略模式全家桶 最后 后端思维 最近工作中,我通过层层…

学Python的漫画漫步进阶 -- 第十二步.文件读写

学Python的漫画漫步进阶 -- 第十二步.文件读写 十二、文件读写12.1 打开文件12.2 关闭文件12.2.1 在finally代码块中关闭文件12.2.2 在with as代码块中关闭文件 12.3 读写文本文件12.4 动动手——复制文本文件12.5 读写二进制文件12.6 动动手——复制二进制文件12.7 练一练12.8…

Redis之list类型

文章目录 Redis之list类型1. 列表添加/弹出元素2. 查看列表3. 获取列表中元素的个数4. 删除列表中指定的值5. 获取/指定元素的值6. 向列表中插入元素7. 删除指定索引范围之外的所有元素8. 将元素从一个列表转移到另一个列表9. 应用场景9.1 队列9.2 类似微信上订阅公众号&#x…

MidJourneyAI绘画之月满中秋情更浓

皓月当空照人间&#xff0c; 银河洒满天幕间。 嫦娥轻舞婵娟态&#xff0c; 桂香飘散诗意添。 团圆乐享如意时&#xff0c; 家人相聚笑声吹。 中秋欢庆如诗意&#xff0c; 祝福平安好运气。

从网约车平台合规问题看企业合规难题如何破解

随着互联网的快速发展&#xff0c;网约车行业逐渐崛起并成为人们出行的重要选择之一。然而&#xff0c;虽然网约车平台带来了便利和效率&#xff0c;但也引发了一系列合规问题。 近日&#xff0c;西安市交通运输综合执法支队和西安市出租汽车管理处组织开展了西安市网约车行业…

Leetcode 95. 不同的二叉搜索树 II

文章目录 题目代码&#xff08;9.21 首刷看解析&#xff09; 题目 Leetcode 95. 不同的二叉搜索树 II 代码&#xff08;9.21 首刷看解析&#xff09; class Solution { public:vector<TreeNode*> generateTrees(int n) {return build(1,n);}vector<TreeNode*> bu…

singularity docker 拉取镜像 seurat和scapy spatial空转数据转换 cell2location

JiekaiLab/scDIOR: scDIOR: Single cell data IO softwaRe (github.com) module availablemodule load singularitysingularity pull docker://jiekailab/scdior-image:Seuratv4_Scanpy1.8 export PATH/seu_share/apps/singularity/bin/singularity:$PATH

C++数据结构题:DS 顺序表--连续操作

建立顺序表的类&#xff0c;属性包括&#xff1a;数组、实际长度、最大长度&#xff08;设定为 1000 &#xff09; 该类具有以下成员函数&#xff1a; 构造函数&#xff1a;实现顺序表的初始化。 插入多个数据的 multiinsert(int i, int n, int item[]) 函数&#xff0c;实…

vue 脚手架 入门 记录

vue 脚手架 入门 记录 以管理员身份运行PowerShell执行&#xff1a;get-ExecutionPolicy&#xff0c;回复Restricted&#xff0c;表示状态是禁止的 3.执行&#xff1a;set-ExecutionPolicy RemoteSigned 4.选择Y 注意&#xff1a;一定要以管理员的身份运行PowerShell&#xff…

Verilog功能模块——标准FIFO转FWFT FIFO

前言 在使用FIFO IP核时&#xff0c;我更喜欢使用FWFT(First Word First Through) FIFO而非标准FIFO&#xff0c;FWFT FIFO的数据会预先加载到dout端口&#xff0c;当empty为低时数据就已经有效了&#xff0c;而rd_en信号是指示此FIFO更新下一个数据&#xff0c;这种FWFT FIFO的…

【Linux基础】第30讲 Linux用户和用户组权限控制命令(二)

1&#xff09;sudo命令 sudo是Linux系统管理指令&#xff0c;是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具&#xff0c;如halt,reboot,su等等&#xff0c;这样不仅减少了root用户的登录和管理时间&#xff0c;同样也提高了安全性。 2&#xff09;修改配置…

Grafana设置默认主页

点击【设置/管理】-> 【默认首选项 Preferences】-> 【主页仪表盘】 在下拉中选择一个页面作为主页即可

山西电力市场日前价格预测【2023-09-22】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2023-09-22&#xff09;山西电力市场全天平均日前电价为322.75元/MWh。其中&#xff0c;最高日前电价为386.53元/MWh&#xff0c;预计出现在06: 45。最低日前电价为237.40元/MWh&#xff0c;预计…

Java高级-动态代理

动态代理 1.介绍2.案例 1.介绍 public interface Star {String sing(String name);void dance(); }public class BigStar implements Star{private String name;public BigStar(String name) {this.name name;}public String sing(String name) {System.out.println(this.name…

一个不怎么成功的三级菜单

三级菜单制作&#xff0c;菜单焦点总是消失&#xff0c;等发现好的再写一篇 发现 ​ 父元素设置了display:flex时&#xff0c;子元素中的display:none或者display:block就会失效。这是因为display:flex的优先级高于display:none和display:block&#xff0c;使他们的作用失效了。…

Map<K,V>的使用和List学习

Map Map是一种专门用来进行搜索的容器或者数据结构&#xff0c;其搜索的效率与其具体的实例化子类有关。对于静态类型的查找来说&#xff0c;一般直接遍历或者用二分查找【不会对区间进行插入和删除操作】 而在现实生活中的查找比如&#xff1a; 根据姓名查询考试成绩通讯录…

RISC-V Reader 笔记(七)RV64,特权架构,未来可选扩展

RV64 比起 RV32&#xff0c;其实扩展不多。 主要是添加了一系列字&#xff0c;双字为单位的操作。 各个 ISA 32 64比较 x86&#xff1a;变量都存在寄存器里&#xff0c;不像 32 存在内存里&#xff0c;因此指令数少很多&#xff0c;但是因此添加了很多新操作码来操作更多的寄…

ctfshow web入门(2)

web11 打开这个网站&#xff0c;到网站诊断分析模块 搜索域名 web12 提示 有时候网站上的公开信息&#xff0c;就是管理员常用密码 打开&#xff0c;就是个购物网站 因为昨天刚做robots.txt 我就搜了一下 真的有&#xff0c;提示admin这个页面 访问一下&#xff0c;userna…

PTE阅读写作讲解

目录 FIB-R和FIB-R想要拿到65分以上的正确率要达到百分之75以上 1.通过因果关系猜词 2.通过同义词和反义词的关系猜词 3.通过定义或释义关系来推测词义 WE 只需要背一个万能模版就可以了&#xff08;160&#xff09; 只需要保证语法正确就可以了 文本中的实词不能出现第…