【 c 语言 】指针入门

在这里插入图片描述

🎈个人主页:豌豆射手^
🎉欢迎 👍点赞✍评论⭐收藏
🤗收录专栏:C语言
🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进步!

【 c 语言 】指针入门

  • 一 内存地址
    • 1.1 概念
    • 1.2 类比
    • 1.3 c 语言 存储一个变量的过程
  • 二 指针的概念
    • 2.1 概念
    • 1.2 类比
  • 三 声明指针变量
  • 四 指针的赋值操作
    • 4.1 变量地址赋值给指针
    • 4.2 改变指针的指向
  • 五 通过指针访问和修改内存中的数据
  • 总结

引言:

在计算机科学的世界里,指针是一个至关重要且经常令人困惑的概念。尤其是在C语言的学习过程中,指针的掌握程度往往决定了编程能力的高低。指针不仅可以帮助我们更深入地理解计算机内存的工作原理,还能大大提高程序的执行效率。

然而,由于其抽象性和复杂性,许多初学者对指针感到畏惧。今天,我们就来揭开指针的神秘面纱,以简洁易懂的方式带领大家走进C语言指针的世界。

在这篇博客中,我们将从内存地址的基本概念入手,逐步深入讲解指针的概念、声明、赋值操作,以及如何通过指针访问和修改内存中的数据。希望通过这篇博客,能够帮助大家建立起对指针的直观认识,为后续的学习和实践打下坚实的基础。

在这里插入图片描述

一 内存地址

1.1 概念

计算机内存地址是计算机体系结构中的重要概念之一,它指的是计算机内存中存储数据的位置。在计算机运行程序时,需要将程序和数据加载到内存中,程序通过访问内存地址来读取和写入数据。

因此,计算机内存地址是程序运行的关键,也是操作系统、编译器和计算机硬件设计的重要基础。

内存被划分为一系列连续的存储单元,每个存储单元都有一个唯一的地址,这些地址可以看作是内存中的房间号,用于定位和访问存储单元中的数据。

内存地址通常用十六进制表示,例如0x0000、0x0001、0x0002等。

每个地址对应一个存储单元,存储单元的大小由计算机架构决定,常见的存储单元大小包括字节(Byte)、字(Word)等。

当CPU需要访问内存时,它会向内存控制器发出地址信号,内存控制器会根据地址信号将数据发送到数据总线上,CPU通过数据总线读取或写入内存中的数据。

由于每个内存地址都对应着一段物理存储空间,计算机可以通过内存地址来访问任意位置的内存,这也是计算机高速访问数据的关键之一。

此外,计算机内存地址的大小决定了计算机可以寻址的内存容量。

在32位计算机中,内存地址由32位二进制数表示,最大可以寻址2^32个内存单元,即4GB。而在64位计算机中,内存地址的位数和寻址能力会更大。

总的来说,计算机内存地址是计算机内存管理的基础,它使得计算机能够高效、准确地访问和操作内存中的数据。

1.2 类比

内存地址的概念可以通过现实生活中的一些例子进行类比,以帮助我们更好地理解和记忆。

以下是一个简单的类比:

类比:图书馆的书架与书籍

假设我们把计算机的内存想象成一个大型的图书馆,图书馆里有很多书架,每个书架都有唯一的编号(这就像是内存地址)。而书架上的每一格都用来放置一本书(这就像是内存单元)。

1 书架编号(内存地址):

每个书架都有一个独特的编号,用来标识它的位置。

这个编号就像内存地址一样,用于快速定位到特定的书架。

2 书籍(数据):

书架上的每一格都放有一本书,这本书包含了特定的信息(数据)。

同样地,内存单元中存储着特定的数据,这些数据可以是变量、程序指令等。

3 查找书籍(访问内存):

当你想找一本书时,你会根据书架的编号找到对应的书架,然后在书架上找到你想要的书籍。

这个过程类似于计算机访问内存的过程:CPU根据内存地址找到对应的内存单元,然后读取或写入数据。

4 书架大小与格子数量(内存大小和单元数量):

图书馆中可能有多个不同大小的书架,每个书架的格子数量也不同。

这类似于计算机内存的大小和内存单元的数量。内存越大,可以存储的数据就越多。

通过这个类比,我们可以将复杂的内存地址概念转化为更容易理解的现实生活场景。书架的编号对应着内存地址,书籍对应着存储在内存中的数据,而查找书籍的过程则类似于计算机访问内存的过程。

需要注意的是,这个类比只是为了帮助理解内存地址的概念,实际的计算机内存结构和操作要复杂得多。但在初学阶段,这样的类比可以帮助我们建立起对内存地址的直观认识。

1.3 c 语言 存储一个变量的过程

假如我们定义了一个整型变量10,这个变量在计算机里是怎么存储的呢?

int x = 10;

在大多数现代计算机系统中,整数变量int x = 10;在内存中的存放方式通常取决于计算机的字长(word size)以及该系统的内存模型。

字长是计算机处理数据的基本单位大小,通常与CPU的寄存器大小相匹配。常见的字长有32位和64位。

以下是一个简化的例子,说明在32位系统上int x = 10;是如何在内存中存放的:

1 变量声明:

首先,在程序中声明了一个整型变量x。

2 内存分配:

当程序运行时,编译器或运行时环境会为变量x在内存中分配一个存储位置。

这个存储位置是一个连续的字节块,其大小足以容纳一个整数。在32位系统上,一个int类型通常占用4个字节(32位)。

3 值存放:

变量x被初始化为值10。这个值会按照计算机的内存模型以二进制形式存放在分配的内存位置中。

在二进制中,整数10表示为1010。但是,由于一个整数在内存中通常使用补码形式表示,并且需要填充到足够的位数(在这个例子中是32位),所以实际的存储形式会有所不同。

对于正数10,其32位补码表示是:00000000 00000000 00000000
00001010。这32位中的每一位都对应内存中的一个位(bit)。

4 内存地址:

这块存储整数10的内存有一个唯一的地址。

这个地址在程序运行时由操作系统或运行时环境管理,并且通常对程序员是不可见的,除非使用指针或特定的调试工具。

在64位系统上,情况类似,但int类型可能仍然占用4个字节(这取决于具体的编程语言和编译器),或者它可能占用8个字节以匹配系统的字长。实际的存储大小取决于C或C++标准库的实现,或者其他编程语言的规范。

在小端字节序系统中,这个32位的数值会按照从最低有效位(LSB)到最高有效位(MSB)的顺序存储。因此,这四个字节会按照以下方式存放在内存中:

内存地址   存储内容(十六进制表示)  
0x1000     10          (最低有效字节)  
0x1001     00  
0x1002     00  
0x1003     00          (最高有效字节,对于小数值通常是0)

在这个例子中,变量x的值10被存储在了从地址0x1000开始的四个连续字节中。每个地址对应一个字节,而整数10的二进制表示被填充并分布在这四个字节中。由于10是一个很小的数,它的高位都是0,所以在高地址字节中存储的都是0。

二 指针的概念

在上面呢,我们了解了内存地址的概念,内存地址本质上就是一段数字,就像整数类型,浮点数类型,字符类型一样,它指的是一种数据类型,是一种变量,那么我们有没有具体数据类型来表示内存地址呢?有!那就是指针。

接下来让我们进入对指针的学习吧!

2.1 概念

在C语言中,指针是一个非常重要的概念,它提供了一种直接访问和操作内存地址的能力。

具体来说,指针是一个变量,但它并不存储实际的数据值,而是存储了另一个变量的内存地址。通过这个地址,我们可以间接地访问和操作该地址处的数据。

首先,指针与变量的关系非常密切。变量是用来存储数据的,而指针则是用来存储变量内存地址的。

我们可以将指针看作是一个“指向”变量的箭头,通过这个箭头,我们可以找到并操作变量的数据。

因此,指针实际上是对变量的一个引用或句柄。

其次,指针本身也是一种变量,它也需要占用一定的内存空间来存储地址信息。

这个内存空间的大小通常是固定的,与具体的机器和编译器有关。

另外,指针变量的类型决定了它所指向的数据类型。

例如,如果我们有一个指向整数的指针,那么它存储的就是一个整数的内存地址;如果我们有一个指向字符的指针,那么它存储的就是一个字符的内存地址。

指针的类型与其所指向的数据类型之间有着密切的关系。指针的类型决定了它所指向的数据的大小和解释方式。

例如,一个指向整数的指针会按照整数的大小和格式来解释它所指向的内存中的数据;

而一个指向字符的指针则会按照字符的大小和格式来解释数据。

这种类型关联性确保了当我们通过指针访问数据时,数据会被正确地解释和使用。

需要注意的是,指针的类型和它所指向的数据类型必须匹配,否则可能会导致错误的内存访问和数据解释。

因此,在使用指针时,我们需要确保指针的类型与其所指向的数据类型一致,以避免潜在的问题。

综上所述,指针是C语言中一个强大的工具,它允许我们直接操作内存地址,并提供了对数据的间接引用和操作能力。通过理解指针的概念、指针与变量的关系以及指针类型与数据类型的关联性,我们可以更好地掌握C语言中的指针用法,并编写出更加高效和灵活的程序。

1.2 类比

在现实生活中,我们可以将指针类比为一张写有地址的便签。

这张便签本身并不包含我们想要找的东西,但它提供了找到这个东西的线索——地址。

想象一下,你想要去一个朋友家玩,但你不知道他家具体在哪里。这时,你的朋友给你一张便签,上面写着他家的详细地址。这张便签就相当于一个指针,它指向了你朋友家的位置。

在这个类比中:

朋友家(数据)是你想要访问和交互的目标。
便签(指针)是存储地址信息的工具。
地址(内存地址)是找到朋友家的关键。

同样地,在C语言中:

变量(如朋友家)存储了实际的数据。
指针(如便签)存储了变量的内存地址。
内存地址(如地址信息)是找到并访问变量数据的途径。

当我们根据便签上的地址找到朋友家时,我们可以和朋友互动、聊天或玩耍(相当于在C语言中通过指针访问和修改变量的值)。

同样地,如果便签上的地址是错误的或者便签丢失了(相当于指针指向了错误的内存地址或指针未被正确初始化),我们就无法找到朋友家,甚至可能会走错地方(在C语言中可能导致程序出错或崩溃)。

因此,指针在C语言中的作用就像便签在现实生活中的作用一样,它们都是帮助我们找到和访问目标的重要工具,但使用不当也可能带来问题。

通过这个类比,我们可以更好地理解指针的概念和它在C语言中的作用。

三 声明指针变量

在C语言中,声明一个指针变量时,你需要指定三个主要部分:数据类型、指针运算符和变量名。

下面是对这三个部分的详细解释:

1 type(数据类型)

type 表示指针将指向的数据类型。

这可以是任何有效的C语言数据类型,如 int(整数)、char(字符)、float(浮点数)、double(双精度浮点数)、结构体类型、联合体类型等。指针的类型决定了它如何解释它所指向的内存中的数据。

例如,如果你声明一个 int 类型的指针,那么这个指针将被解释为指向整数的内存地址。

2 * (指针运算符)

" * " 是指针运算符,它用于声明指针变量。

在声明中,* 紧接在变量名之前,表示这个变量是一个指针,即它存储的是另一个变量的地址,而不是值。

当你使用 * 运算符与指针变量一起时(例如在赋值或解引用操作中),你正在访问或操作指针指向的内存位置的内容。

3 pointer_variable(指针变量名)

pointer_variable 是你给指针变量起的名字。这个名字用于在代码中引用和操作这个指针变量。

你可以像操作其他变量一样操作指针变量,包括给它赋值、传递给它参数等。

标准格式:

type *pointer_variable;

以下是一些具体的例子:

1 声明一个指向整数的指针:

int *ptr_int;

在这个例子中,ptr_int 是一个指向整数的指针。

它目前并不指向任何具体的整数,除非你给它赋值。

2 声明一个指向字符的指针:

char *ptr_char;

在这个例子中,ptr_char 是一个指向字符的指针。

同样,它目前并不指向任何具体的字符,除非你给它赋值。

3 声明一个指向浮点数的指针:

float *ptr_float;

在这个例子中,ptr_float 是一个指向浮点数的指针。

它目前并不指向任何具体的浮点数,除非你给它赋值。

当你声明了一个指针变量后,你需要给它分配一个地址,让它指向某个具体的变量或内存位置。这通常是通过使用 & 运算符(取地址运算符)或者通过动态内存分配(如 malloc 或 calloc)来实现的。

例如:

int num = 10;  
int *ptr_int = #  // ptr_int 现在指向 num 的地址

在这个例子中,ptr_int 被赋值为 num 的地址,所以 ptr_int 现在指向 num。你可以通过 *ptr_int 来访问或修改 num 的值。

四 指针的赋值操作

在C语言中,指针是一种特殊的变量,它存储的是另一个变量的内存地址,而不是实际的值。

指针的赋值操作有两种主要情况:一是将变量的地址赋值给指针,二是改变指针的指向。

首先,我们来看如何将变量的地址赋值给指针:

4.1 变量地址赋值给指针

当我们说一个指针指向某个变量的地址时,我们实际上是将该变量的内存地址赋值给指针。

这通常通过使用取地址操作符 & 来实现,该操作符返回其操作数的内存地址。

下面是一个简单的C语言代码示例,演示了如何使指针指向变量的地址,并输出这个地址:

#include <stdio.h>  int main() {  int variable = 42;  // 定义一个整型变量并初始化  int *pointer;       // 定义一个整型指针  // 让指针指向变量的地址  pointer = &variable;  // 输出指针指向的地址  printf("The address of variable is: %p\n", (void *)pointer);  return 0;  
}

运行结果:

The address of variable is: 0x7ffeecbc

分析:

int variable = 42; 

这行代码定义了一个整型变量 variable 并将其初始化为 42。

 int *pointer; 

这行代码定义了一个整型指针 pointer。此时 pointer 并未初始化,它可能指向任何随机的内存地址。

 pointer = &variable; 

这行代码是关键。这里使用了取地址操作符 & 来获取 variable的内存地址,并将这个地址赋值给 pointer。现在 pointer 指向 variable 的内存地址。

 printf("The address of variable is: %p\n", (void *)pointer); 

这行代码输出了 pointer 所指向的地址。

%p 是用来输出指针地址的格式说明符,并且需要将指针强制转换为 void * 类型来匹配格式说明符。这是因为 void * 是一个通用指针类型,可以指向任何类型的数据。

注意:每次运行程序时,variable 的内存地址都可能不同,因为它是由操作系统在运行时动态分配的。

4.2 改变指针的指向

在C语言中,改变指针的指向意味着将指针变量重新赋值为一个新的地址。

这通常是通过赋值操作符 = 来实现的,新值应该是一个有效的内存地址。

以下是一个代码示例,它演示了如何改变指针的指向,并输出原数值、原地址、新数值和新地址:

#include <stdio.h>  int main() {  int originalValue = 10;  // 原数值  int newValue = 20;       // 新数值  int *pointer;            // 定义指针  // 初始时,指针指向原数值的地址  pointer = &originalValue;  printf("原数值:%d\n", *pointer);       // 输出原数值  printf("原地址:%p\n", (void *)pointer); // 输出原地址  // 改变指针指向,使其指向新数值的地址  pointer = &newValue;  printf("新数值:%d\n", *pointer);       // 输出新数值  printf("新地址:%p\n", (void *)pointer); // 输出新地址  return 0;  
}

运行结果可能类似于:

原数值:10  
原地址:0x7ffeecbc  
新数值:20  
新地址:0x7ffeecbc+4

分析:

这段代码首先定义了两个整型变量originalValue和newValue,分别赋值为10和20。

然后定义了一个整型指针pointer。

接着,将pointer指向originalValue的地址,并通过*pointer输出原数值,同时输出pointer所指向的原地址。

之后,改变pointer的指向,使其指向newValue的地址,并输出新数值和新地址。

整个程序通过改变指针的指向,展示了指针如何与内存地址相关联,并如何通过指针访问和修改变量的值。

通过上面的代码和解释,我们可以清晰地看到如何改变指针的指向,并通过输出原数值、原地址、新数值和新地址来验证这一操作。

在C语言中,指针的指向可以随时改变,这使得指针在动态内存管理、数组操作、函数参数传递等场景中非常有用。

然而,也需要注意,改变指针指向后,原指向的内存地址(如果不再使用)可能不再有效,需要谨慎处理以避免内存泄漏或野指针等问题。

五 通过指针访问和修改内存中的数据

在C语言中,指针是一个变量,它存储的是内存地址而不是实际的值。通过指针,我们可以直接访问和修改内存中的数据。下面是一个简单的例子来说明如何通过指针访问和修改内存中的数据。

首先,我们创建一个整数变量并赋予它一个值:

int var = 10;

此时,var 变量在内存中有一个特定的地址。为了访问这个地址,我们可以定义一个指向整数的指针,并将 var 的地址赋给它:

int *ptr = &var;

在上面的代码中,&var 是一个取地址操作符,它返回 var 变量的内存地址。

然后,我们将这个地址赋给名为 ptr 的指针变量。现在,ptr 包含了 var 的内存地址。

要通过指针访问 var 的值,我们可以使用解引用操作符 *:

printf("The value of var is: %d\n", *ptr);

在上述代码中,*ptr 表示访问 ptr 所指向的内存地址中的值,即 var 的值。

因此,输出将是 The value of var is: 10。

接下来,我们可以通过指针修改 var 的值:

*ptr = 20;  
printf("The new value of var is: %d\n", var);

在上述代码中,我们将 *ptr(即 var 的值)设置为 20。

因此,var 的值现在变为 20,输出将是 The new value of var is: 20。

这就是通过指针访问和修改内存中的数据的基本方法。请注意,指针操作需要谨慎处理,因为错误的指针操作可能导致内存泄漏、数据损坏或其他未定义的行为。因此,在使用指针时,请确保您了解它们的用法和限制。

总结

通过本次对C语言指针的入门学习,我们了解了指针的基本概念、声明方式以及赋值操作。

指针作为连接变量和内存地址的桥梁,为我们提供了直接操作内存数据的可能。

掌握指针的使用不仅可以帮助我们深入理解计算机内存的运作机制,还能提升编程效率,优化程序性能。当然,指针也是一把双刃剑,不当的使用可能会导致内存泄漏、数据混乱等问题。

因此,在使用指针时,我们必须格外小心,确保每一次操作都符合预期。希望本篇博客能够帮助大家更好地理解和使用指针,为后续的编程之路奠定坚实的基础。

这篇文章到这里就结束了

谢谢大家的阅读!

如果觉得这篇博客对你有用的话,别忘记三连哦。

我是豌豆射手^,让我们我们下次再见

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

2000-2021年各省外商直接投资水平面板数据(含原始数据+计算结果)(无缺失)

2000-2021年各省外商直接投资水平面板数据&#xff08;含原始数据计算结果&#xff09;&#xff08;无缺失&#xff09; 1、时间&#xff1a;2000-2021年 2、指标&#xff1a;外商直接投资额&#xff08;万美元&#xff09;、外商直接投资额&#xff08;万元&#xff09;、国…

程序人生——Java泛型和反射的使用建议

目录 引出泛型和反射建议93&#xff1a;Java的泛型是类型擦除的建议94&#xff1a;不能初始化泛型参数和数组建议95&#xff1a;强制声明泛型的实际类型 建议96&#xff1a;不同的场景使用不同的泛型通配符建议97&#xff1a;警惕泛型是不能协变和逆变的 建议98&#xff1a;建议…

Linux 系统调用函数fork、vfork、clone详解

文章目录 1 fork1.1 基本介绍1.2 fork实例1.2.1多个fork返回值1.2.2 C语言 fork与输出1.2.3 fork &#x1f4a3; 2 vfork2.1 基本介绍2.2 验证vfork共享内存 3 clone3.1 基本介绍3.2 clone使用 1 fork 1.1 基本介绍 #include <sys/types.h> #include <unistd.h>p…

2023年中国抗DDoS市场规模现状及竞争格局,公有云抗DDoS是主要增长点

分布式拒绝服务&#xff08;DDoS&#xff09;是在DoS基础之上产生的一种新的攻击方式&#xff0c;具有多对一的攻击模式。它通过制造伪造的流量&#xff0c;使得被攻击的服务器、网络链路或是网络设备&#xff08;如防火墙、路由器等&#xff09;负载过高&#xff0c;无法处理正…

【Poi-tl Documentation】区块对标签显示隐藏改造

前置说明&#xff1a; <dependency><groupId>com.deepoove</groupId><artifactId>poi-tl</artifactId><version>1.12.1</version> </dependency>模板&#xff1a; 删除行表格测试.docx 改造前测试效果 package run.siyuan…

c++入门学习⑨——STL(万字总结,超级超级详细版)看完这一篇就够了!!!

目录 &#x1f384;前言 &#x1f384;概念 引入 定义 优点 &#x1f384;六大组件 容器 算法 迭代器 仿函数 适配器 空间配置器 &#x1f384;三大组件 迭代器&#xff08;iterator&#xff09; 定义 分类&#xff1a; 正向迭代器&#xff1a; 常量正向迭代…

短视频矩阵系统/短视频矩阵系统技术saas研发

短视频矩阵系统SaaS研发是一个复杂且需要技术专业知识的工作。以下是一些关键步骤和建议&#xff0c;帮助你开发一个成功的短视频矩阵系统SaaS&#xff1a; 1. 明确需求&#xff1a;首先&#xff0c;你需要明确你的短视频矩阵系统的具体需求&#xff0c;例如用户规模、视频内容…

MATLAB:拟合与插值

一、关于多项式的基本操作 若要求非线性方程的根&#xff0c;则采用fzero, fminbnd函数 二、多项式拟合 clc, clear x0:0.2:10; y0.25*x20*sin(x); plot(x,y,k.,MarkerSize,15) grid on; hold on [p1,s1,mu1]polyfit(x,y,3); %3阶多项式拟合 y1polyval(p1,x,s1,mu1); [p2,s…

简易版 RPC 框架实现 1.0 -http实现

RPC 是“远程过程调用&#xff08;Remote Procedure Call&#xff09;”的缩写形式&#xff0c;比较通俗的解释是&#xff1a;像本地方法调用一样调用远程的服务。虽然 RPC 的定义非常简单&#xff0c;但是相对完整的、通用的 RPC 框架涉及很多方面的内容&#xff0c;例如注册发…

【jeecgboot】微服务实战LISM

目录 一、服务解决方案-Spring Cloud Alibaba1.1选用原因&#xff08;基于Spring Cloud Alibaba的试用场景&#xff09;1.2 核心组件使用前期规划 部署 nacos部署 mino使用JavaFreemarker模板引擎&#xff0c;根据XML模板文件生成Word文档使用JavaFlowable 工作流引擎前端 -vue…

瑞熙贝通打造智慧校园实验室安全综合管理平台

一、建设思路 瑞熙贝通实验室安全综合管理平台是基于以实验室安全&#xff0c;用现代化管理思想与人工智能、大数据、互联网技术、物联网技术、云计算技术、人体感应技术、语音技术、生物识别技术、手机APP、自动化仪器分析技术有机结合&#xff0c;通过建立以实验室为中心的管…

Java项目:54 springboot工资信息管理系统453

作者主页&#xff1a;源码空间codegym 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 本系统的使用角色可以被分为用户和管理员&#xff0c; 用户具有注册、查看信息、留言信息等功能&#xff0c; 管理员具有修改用户信息&#…

湖南麒麟SSH服务漏洞

针对湖南麒麟操作系统进行漏洞检测时&#xff0c;会报SSH漏洞风险提醒&#xff0c;具体如下&#xff1a; 针对这些漏洞&#xff0c;可以关闭SSH服务&#xff08;前提是应用已经部署完毕不再需要通过SSH远程访问传输文件的情况下&#xff0c;此时可以通过VNC远程登录方法&#x…

操作系统——cpu、内存、缓存介绍

一、内存是什么 内存就是系统资源的代名词&#xff0c;它是其他硬件设备与 CPU 沟通的桥梁&#xff0c; 计算机中的所有程序都在内存中运行。其作用是暂时存放CPU的运算数据&#xff0c;以及与硬盘交换的数据。也是相当于CPU与硬盘沟通的桥梁。只要计算机在运行&#xff0c;CP…

腾讯云2核4G服务器可以多少人同时访问?2核4G5M并发数计算

腾讯云轻量2核4G5M带宽服务器支持多少人在线访问&#xff1f;5M带宽下载速度峰值可达640KB/秒&#xff0c;阿腾云以搭建网站为例&#xff0c;假设优化后平均大小为60KB&#xff0c;则5M带宽可支撑10个用户同时在1秒内打开网站&#xff0c;并发数为10&#xff0c;经阿腾云测试&a…

电脑实现微信多开

电脑实现微信多开 现在很多人都有两个微信号&#xff0c;将工作与生活分开。工作上的伙伴用一个微信&#xff0c;生活中的朋友用一个微信。但是电脑只能打开一个微信&#xff0c;接下来简单三步教大家如何在电脑实现微信多开。 一、复制微信位置 右击单击微信&#xff0c;选…

Ubuntu 14.04:PaddleOCR基于PaddleHub Serving的服务部署(失败)

目录 一、为什么使用一键服务部署 二、安装 paddlehub 1.8 2.1 安装前的环境准备 2.2 安装paddlehub 1.8 2.2.1 安装paddlehub 2.2.2 检测安装是否成功 2.2.3 检查本地与远端PaddleHub-Server的连接状态 2.2.4 测试使用 2.3 其他 2.3.1 如何卸载、pip常用命令、常见…

Microsoft SQL Server2019占用大量磁盘空间的解决办法(占了我C盘120G的空间!!!)附SQL数据库定时清理代理作业

一、问题 安装Microsoft SQL Server2019后我的C盘在几天后少了100G&#xff0c;如图所示&#xff1a; 解决后&#xff1a; 出现这种情况&#xff0c;我在各种清理C盘后&#xff0c;空间还是没有太大变化 &#xff0c;且几乎每天都要少2个G&#xff0c;后来终于找见原因了&…

XCTF:level0[WriteUP]

PWN入门题目&#xff1a;XCTF攻防世界的level0 使用file、checksec命令查看文件详细信息 这是一个64bit的ELF文件&#xff08;后面编写EXP需要用到&#xff09; 从checksec中展示的信息看&#xff0c;该二进制文件只开启了NX&#xff08;数据执行保护&#xff09; 这样的话就…

【UE5】持枪状态站立移动的动画混合空间

项目资源文末百度网盘自取 创建角色在持枪状态站立移动的动画混合空间 在BlendSpace文件夹中单击右键选择动画(Animation)中的混合空间(Blend Space) 选择SK_Female_Skeleton 命名为BS_RifleStand 打开 水平轴表示角色的方向&#xff0c;命名为Direction&#xff0c;方…