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

06C语言——指针

一、指针入门

(1)、准备知识

0、图解:

1、内存地址

  • 字节:字节是内存的容量单位,英文称为 byte,一个字节有8位,即 1byte(0000 0000 --- 1111 1111) = 8bits(0 --- 1)
  • 地址:系统为了便于区分每一个字节而对它们逐一进行的编号,称为内存地址,简称地址。

32位系统:

说明:

地址+1就是加1个字节

为什么选32位系统来讲内存??

32位:4G内存:

64位:理论:1800亿亿GB,操作系统支持:16TB,电脑实际的内存条:4G-32G(所以本质上还是基于4G)

2、基地址

  • 单字节数据:对于单字节数据而言,其地址就是其字节编号。
  • 多字节数据:对于多字节数据而言,其地址是其所有字节中编号最小的那个,称为基地址。

3、取址符

  • 每个变量都是一块内存,都可以通过取址符 & 获取其地址
  • 注意:
    • 虽然不同的变量的尺寸是不同的,但是他们的地址的尺寸确实一样的。
    • 不同的地址虽然形式上看起来是一样的,但由于他们代表的内存尺寸和类型都不同,因此它们在逻辑上是严格区分的。
  • 示例代码:
// (1)、如何获取一个内存的地址??
char   ch1 = 200;
int   num1 = 100;
float  f1  = 3.14;
double f2  = 6.18;// 1、不同的变量的尺寸是不同的
printf("ch1的地址  == %p\n", &ch1);
printf("num1的地址 == %p\n", &num1);
printf("f1的地址   == %p\n", &f1);
printf("f2的地址   == %p\n", &f2);
/*// 3- 不同的地址虽然形式上看起来是一样的,但由于他们代表的内存尺寸和类型都不同,因此它们在逻辑上是严格区分的。解析:ch1的地址  == 0x7ffd1cf9c917        // char型内存占1字节num1的地址 == 0x7ffd1cf9c918        // int型内存占4字节f1的地址   == 0x7ffd1cf9c91c        // float型内存占4字节f2的地址   == 0x7ffd1cf9c920        // float型内存占8字节
*/// 2、但是他们的地址的尺寸确实一样的
printf("ch1的地址的尺寸  == %lu\n", sizeof(&ch1));
printf("num1的地址的尺寸 == %lu\n", sizeof(&num1));
printf("f1的地址的尺寸   == %lu\n", sizeof(&f1));
printf("f2的地址的尺寸   == %lu\n", sizeof(&f2));

(2)、指针的概念

0、图解:

1、指针的说明

由于翻译的问题,以及口语表达的习惯,在日常表述中,指针在不同的场合会代表以下几个含义:

  • 指 地址
    • 比如变量a的地址 &a,这是一个地址当然也是一个指针,我们可以说指针 &a 指向变量 a。
  • 指 指针变量
    • 比如 int *p; 此处变量p是指针变量,又常被简称指针。
  • 示例代码:
// (1)、指针的说明
// 1、指地址
int num2 = 200;
printf("num2的地址 == %p\n", &num2) ;   // 可以认为&num2为指针,这个指针&num指向了变量num2(或者num2的地址被&num2给存放了)// 2、指指针变量
int num3 = 300;
int *p1  = &num3;                      // 指针变量p里面存放了num3的内存的地址(指针变量p指向了num的内存)

2、指针的初始化(定义)

// 1、未初始化的类型                    // 注意:定义指针的时候,必须要有具体的合法指向,否则指针将会在内存中乱指,导致数据处理出错
char   *p1;                            // 字符型指针类型
int    *p2;                            // 整型指针类型
float  *p3;                            // 浮点型指针类型
double *p4;                            // 双精度浮点型指针类型// 2、推荐的初始化
char ch  = 0;                         
char *p5 = &ch;                        // 指向确定的我们申请的合法内存(可读可写)
char *p6 = NULL;                       // 指向内存中一个临时的安全的保留区域(不可访问区域)

3、指针的赋值

int num4 = 100;
int *p7  = NULL;
p7   = &num4;                           // 一般性的赋值操作,和初始化(定义)是不一样的,不需要加*号,p8本身就是指针变量

4、指针的索引(引用)

int num5 = 500;
num5     = 555;                         // 直接通过内存的名字,对其内存进行赋值操作int *p8  = &num5;                       // 让指针p8指向这块内存
*p8      = 888;                         // 间接通过指针p8来控制num5的内存,然后给其赋值
printf("num5 == %d\n", num5);/*int *p和*p的不同:int *p: 这个是初始化,只是表明这个p变量是个指针*p:    这个不是初始化,是后面的语句用的,这个时候表明其是指针p指向的那块内存p:      这个不是初始化,是后面的语句用的,这个时候表明其是指针变量p
*/

二、特殊指针

(1)、野指针

  • 概念:指向一块未知区域的指针,被称为野指针。野指针是危险的。

  • 危害:
  1. 引用野指针,相当于访问了非法的内存,常常会导致段错误(segmentation fault)
  2. 引用野指针,可能会破坏系统的关键数据,导致系统崩溃等严重后果
  • 产生原因:
  1. 指针定义之后,未初始化
  2. 指针所指向的内存,被系统回收
  3. 指针越界
  • 如何防止:
  1. 指针定义时,及时初始化
  2. 绝不引用已被系统回收的内存
  3. 确认所申请的内存边界,谨防越界

示例代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>// 计算数组元素的个数
#define CAL_ARR_NUM(A) (sizeof(A)/sizeof(A[0]))// 整个数组的大小 / 数组的首元素的大小 == 数组元素个数// 自己定义的NULL
#define SELF_NULL ((void *)0) // 官方定义的NULL
// #define NULL ((void *)0)   // 空指针// 主函数
int main(int argc, char const *argv[])
{// (1)、野指针// 1、指针定义之后,未初始化char *p1;/*解决方法:方法一:char *p1 = NULL;  // char *p1 =  SELF_NULL方法二:char ch  = 'a';char *p1 = &ch;*/// 2、指针所指向的内存,被系统回收char *str = malloc(100);    // 申请堆内存空间:申请一块100个字节的内存空间(堆空间),str指针指向了这块内存strcpy(str, "hello");       // 通过str指针将"hello"字符串数据,复制到str指向的内存中(堆空间)// free(str);               // 释放堆内存空间:通过str指针释放其指向的内存空间if (str != NULL)            // str指针释放堆内存空间后,其指向依然是那个空间的位置,不会是NULL(具体看系统,看编译器){strcpy(str, "world");   // 之前已经释放了str指针指向的堆内存空间了,对其已经没有访问权限了,所以会报错误或警告printf("str == %s\n", str);}// 解决方法:使用完该内存,再释放,绝不再次使用// 3、指针越界char buf[] = "shijie";char *p2   = buf;// 数组的地址for (int i = 0; i < 7; i++){printf("buf[%d]的地址 == %p\n", i, &buf[i]);}// p2逐渐加1的地址for (int i = 0; i < 7; i++){printf("p2+%d的地址 == %p\n", i, p2+i); // 将指针变量p2里面的地址打印出来}*(p2+10) = 'a';     // 此处不能赋值,因为越界了,不是我门申请的合法内存空间/*解决方法:让指针赋值操作在其限定的合法内存的区域上进行比如:使用这个函数CAL_ARR_NUM(A)   // 计算其合法内存区域的长度*/return 0;
}

(2)、空指针

很多情况下,我们不可避免地会遇到野指针,比如刚定义的指针内无法立即为其分配一块恰当的存,又或者指针所指向的内存被释放了等等。一般的做法就是将这些危险的野指针指向一块确定的内存,比如零地址内存。

  • 概念:空指针即保存了零地址的指针,亦即指向零地址的指针。
// 自写的NULL空指针
#define SELF_NULL ((void *)0)   // 官方定义的NULL空指针
#define NULL ((void *)0)

三、指针运算

(1)、计算指针的大小

  • 指针的大小(尺寸)   --- 只和系统位数相关(32位:4字节, 64字节),和数据类型无关
char    *p1 = NULL;
int     *p2 = NULL;
float   *p3 = NULL;
double  *p4 = NULL;printf("sizeof(f1) == %lu\n", sizeof(p1));
printf("sizeof(f2) == %lu\n", sizeof(p2));
printf("sizeof(f3) == %lu\n", sizeof(p3));
printf("sizeof(f4) == %lu\n", sizeof(p4));/*32位系统:sizeof(f1) == 4sizeof(f2) == 4sizeof(f3) == 4sizeof(f4) == 464位系统:sizeof(f1) == 8sizeof(f2) == 8sizeof(f3) == 8sizeof(f4) == 8
*/

(2)、指针的加减乘除(乘除没有任何意义,因此无需理会)

  • 指针加法意味着地址向上(高地址方向)移动若干个目标
  • 指针减法意味着地址向下(低地址方向)移动若干个目标

图解:

示例代码:

char ch1   = 'a';
int num1   = 100;
double f1  = 3.14;char  *p5  = &ch1;
int   *p6  = &num1;
double *p7 = &f1;// 1、乘除没有任何意义的解释
/*地址: 乘法: 0x7fffcadca377 * 5: 你很难知道这块内存到底在哪里(所以毫无意义)除法: 0x7fffcadca377 / 5
*/// 2、指针的加减法
// a、char型指针
printf("\n");
printf("指针变量p5存放的地址(ch1变量的地址)     == %p\n", p5);
printf("指针变量p5+1存放的地址(ch1变量的地址+1) == %p\n", p5+1);
/*解析:指针变量p5存放的地址(ch1变量的地址)     == 0x7ffdbddf20f7指针变量p5+1存放的地址(ch1变量的地址+1) == 0x7ffdbddf20f8地址只移动了一个字节,证明指针p5的作用范围是1个字节
*/// b、int型指针
printf("\n");
printf("指针变量p6存放的地址(num1变量的地址)     == %p\n", p6);
printf("指针变量p6+1存放的地址(num1变量的地址+1) == %p\n", p6+1);
/*解析:指针变量p6存放的地址(num1变量的地址)     == 0x7ffdc805c918指针变量p6+1存放的地址(num1变量的地址+1) == 0x7ffdc805c91c地址只移动了4个字节,证明指针p6的作用范围是4个字节
*/// c、double型指针
printf("\n");
printf("指针变量p7存放的地址(f1变量的地址)     == %p\n", p7);
printf("指针变量p7+1存放的地址(f1变量的地址+1) == %p\n", p7+1);
/*解析:指针变量p7存放的地址(f1变量的地址)     == 0x7ffcba66ad08指针变量p7+1存放的地址(f1变量的地址+1) == 0x7ffcba66ad10地址只移动了8个字节,证明指针p7的作用范围是8个字节
*/

至此,希望看完这篇文章的你有所收获,我是Bardb,译音八分贝,期待下期与你相见!

 

相关文章:

06C语言——指针

一、指针入门 (1)、准备知识 0、图解&#xff1a; 1、内存地址 字节&#xff1a;字节是内存的容量单位&#xff0c;英文称为 byte&#xff0c;一个字节有8位&#xff0c;即 1byte(0000 0000 --- 1111 1111) 8bits(0 --- 1) 地址&#xff1a;系统为了便于区分每一个字节而对…...

Ubuntu DeepSeek磁盘空间不够解决办法

标签&#xff1a; Ubuntu&#xff1b; DeepSeek磁盘空间不够解决办法&#xff1b;Ubuntu 22, DeepSeek R1 671 B, solution for Insufficient Disk Space 问题&#xff1a;Ubuntu 22&#xff0c; DeepSeek R1 671B 磁盘空间不够解决办法 Ubuntu 22.04操作系统&#xff0c;台式…...

东信营销科技巨额补贴仍由盈转亏:毛利率大幅下滑,现金流告急

《港湾商业观察》施子夫 近期&#xff0c;东信营销科技有限公司&#xff08;以下简称&#xff0c;东信营销科技&#xff09;递表港交所&#xff0c;联席保荐机构为海通国际和中银国际。 东信营销科技的国内运营主体为深圳市东信时代信息技术有限公司。尽管期内收入规模有所提…...

Qt layout

文章目录 Qt layout**关键机制****验证示例****常见误区****最佳实践****总结**关键点总结&#xff1a;示例代码说明&#xff1a;结论&#xff1a; Qt layout 在 Qt 中&#xff0c;当调用 widget->setLayout(layout) 时&#xff0c;layout 的父对象会被自动设置为该 widget…...

本地部署轻量级web开发框架Flask并实现无公网ip远程访问开发界面

文章目录 1. 安装部署Flask2. 安装Cpolar内网穿透3. 配置Flask的web界面公网访问地址4. 公网远程访问Flask的web界面 本篇文章主要讲解如何在本地安装Flask&#xff0c;以及如何将其web界面发布到公网进行远程访问。 Flask是目前十分流行的web框架&#xff0c;采用Python编程…...

基于YOLO11深度学习的苹果叶片病害检测识别系统【python源码+Pyqt5界面+数据集+训练代码】

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…...

Android MMKV集成指南

首先简单介绍一下MMKV当下Android Studio最版本及Gradle8.7 MMKV集成根据官方文档重新对mmkv重新包了一次(便于开发)总结首先简单介绍一下MMKV MMKV 是腾讯开源的一款专为移动端设计的高性能键值存储组件,旨在替代传统的 SharedPreferences 和 SQLite,尤其在频繁读写和数据…...

React七Formik

Formik是一个专为React构建的开源表单库。它提供了一个易于使用的API来处理表单状态管理&#xff0c;表单验证以及表单提交。Formik支持React中的所有表单元素和事件&#xff0c;可以很好地与React生态系统中的其他库集成。同时&#xff0c;Formik还提供了一些高级功能&#xf…...

5分钟使用Docker部署Paint Board快速打造专属在线画板应用

文章目录 前言1.关于Paint Board2.本地部署paint-board3.使用Paint Board4.cpolar内网穿透工具安装5.创建远程连接公网地址6.固定Paint Board公网地址 &#x1f4a1; 推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住…...

可狱可囚的爬虫系列课程 14:10 秒钟编写一个 requests 爬虫

一、前言 当重复性的工作频繁发生时&#xff0c;各种奇奇怪怪提高效率的想法就开始萌芽了。当重复代码的模块化封装已经不能满足要求的时候&#xff0c;更高效的方式就被揭开了神秘的面纱。本文基于这样的想法&#xff0c;来和大家探讨如何 10 秒钟编写一个 requests 爬虫程序。…...

【深度学习神经网络学习笔记(三)】向量化编程

向量化编程 向量化编程前言1、向量化编程2、向量化优势3、正向传播和反向传播 向量化编程 前言 向量化编程是一种利用专门的指令集或并行算法来提高数据处理效率的技术&#xff0c;尤其在科学计算、数据分析和机器学习领域中非常常见。它允许通过一次操作处理整个数组或矩阵的…...

PHP入门基础学习四(PHP基本语法)

运算符 运算符&#xff0c;专门用于告诉程序执行特定运算或逻辑操作的符号。根据运算符的作用&#xff0c;可以将PHP语言中常见的运算符分为9类 算数运算符&#xff1a; 是用来处理加减乘除运算的符号 也是最简单和最常用的运算符号 赋值运算符 1. 是一个二元运算符&#x…...

【十二】Golang 映射

&#x1f4a2;欢迎来到张胤尘的开源技术站 &#x1f4a5;开源如江河&#xff0c;汇聚众志成。代码似星辰&#xff0c;照亮行征程。开源精神长&#xff0c;传承永不忘。携手共前行&#xff0c;未来更辉煌&#x1f4a5; 文章目录 映射映射的定义映射初始化make 函数使用字面量 源…...

简单理解Oracle中的latch

可以用一个小卖部抢购的例子来理解 Oracle 数据库中的 Latch&#xff1a; 1、 什么是 Latch&#xff1f; 打个比方&#xff0c;假设数据库的某个内存区域&#xff08;比如缓存的数据块&#xff09;是小卖部货架上的最后一包辣条&#xff0c;Latch 就像是货架前的一个狭窄通道&a…...

hbase集群部署

1.hbase集群的搭建&#xff08;以及内部逻辑&#xff09; 虽然Hmaster有多个&#xff0c;但是属于热备&#xff0c;起作用的就active上的这个。 部署流程&#xff1a; 因为我配置的hadoop是一个非HA的&#xff0c;所以修改为以下 如果是HA的hadoop一定要做以下这一步。 在启动…...

塔能物联运维保障智慧地下停车场安全与高效

一、智慧地下停车场安全在城市升级改造中的关键地位 随着城市的不断发展和升级改造&#xff0c;智慧地下停车场的重要性日益凸显。在现代城市中&#xff0c;土地资源愈发珍贵&#xff0c;地下停车场成为解决停车难题的关键设施。然而&#xff0c;停车场的安全问题是其正常运行和…...

面试八股文--数据库基础知识总结(2) MySQL

本文介绍关于MySQL的相关面试知识 一、关系型数据库 1、定义 关系型数据库&#xff08;Relational Database&#xff09;是一种基于关系模型的数据库管理系统&#xff08;DBMS&#xff09;&#xff0c;它将数据存储在表格&#xff08;表&#xff09;中&#xff0c;并通过表格…...

深入理解指针2

深入理解指针2 数组名的理解 数组名就是首元素的地址 int arr[]{1,3,2}; printf("%p\n",arr); printf("%p\n",&arr[0]);但是有两种情况除外&#xff0c; 1.sizeof(数组名)&#xff0c;sizeof操作符统计的是整个数组的大小&#xff0c;并不是第一个元素…...

QT各种版本下载安装

参考链接&#xff1a; 【Qt】超详细&#xff01;Qt4.8.6和VS2010的配置及使用 由于QT官网一般现在进不去&#xff0c;所以下载一些QT版本只能通过镜像或者以前下载存储的安装包来进行&#xff0c;现在推荐两种方法 从参考链接中搬过来&#xff1a; 方案一&#xff1a;国内镜…...

java进阶学习脑图

今天开始分享我的第一篇博客&#xff0c;先放上我自己花费一个月完成的java进阶学习脑图吧&#xff01; 谁都想像R大一样对JVM可以知无不言&#xff0c;言无不尽&#xff1b; 谁都想像Doug Lea一样可以参与JUC这种核心模块的开发&#xff1b; 但是&#xff0c;不能只停留在想…...

Spring 原始注解详解与实战指南

&#x1f4dd; 1. 前言 在 Spring 框架的发展过程中&#xff0c;注解的引入大大简化了配置&#xff0c;提升了开发效率 本文将详细介绍 Spring 最初引入的核心注解&#xff0c;包括 Component、Controller、Service、Repository、Autowired、Qualifier 和 Value 等&#xff0c;…...

uniapp封装请求

在uniapp中封装HTTP请求&#xff0c;通常我们会使用uni.request方法。uni.request是uni-app提供的一个网络请求API&#xff0c;可以用来发送各种类型的HTTP请求&#xff08;GET、POST、PUT、DELETE等&#xff09;。下面是如何在uniapp中封装一个通用的HTTP请求方法&#xff0c;…...

YOLOv10 解析与地平线 征程 6 模型量化

一&#xff0c;YOLOv10 解析 1.简介 近些年来&#xff0c;研究人员对 YOLO 的架构设计、优化目标、数据增强策略等进行了探索&#xff0c;取得了显著进展。然而&#xff0c;后处理对非极大值抑制&#xff08;NMS&#xff09;的依赖阻碍了 YOLO 的端到端部署&#xff0c;并对推…...

基本网络安全的实现

基本网络安全的实现 一 &#xff1a;AAA AAA 是Authentication&#xff0c;Authorization and Accounting&#xff08;认证、授权和计费&#xff09;的简 称&#xff0c;它提供了一个用来对认证、授权和计费这三种安全功能进行配置的一致性框架&#xff0c; 它是对网络安全…...

ROS2 强化学习:案例与代码实战

一、引言 在机器人技术不断发展的今天&#xff0c;强化学习&#xff08;RL&#xff09;作为一种强大的机器学习范式&#xff0c;为机器人的智能决策和自主控制提供了新的途径。ROS2&#xff08;Robot Operating System 2&#xff09;作为新一代机器人操作系统&#xff0c;具有…...

Java数据结构第十四期:走进二叉树的奇妙世界(三)

专栏&#xff1a;数据结构(Java版) 个人主页&#xff1a;手握风云 目录 一、二叉树OJ练习题 1.1. 相同的树 1.2. 另一棵树的子树 1.3. 翻转二叉树 1.4. 平衡二叉树 1.5. 对称二叉树 一、二叉树OJ练习题 1.1. 相同的树 判断两棵树是否相同&#xff0c;我们是否只能遍历一…...

GO 进行编译时插桩,实现零码注入

Go 编译时插桩 Go 语言的编译时插桩是一种在编译阶段自动注入监控代码的技术&#xff0c;目的是在不修改业务代码的情况下&#xff0c;实现对应用程序的监控和追踪。 基本原理 Go 编译时插桩的核心思想是通过在编译过程中对源代码进行分析和修改&#xff0c;将监控代码注入到…...

《炎龙骑士团 1 邪神之封印》游戏信息

发行公司&#xff1a;1994 年由汉堂国际资讯公司发行。 游戏类型&#xff1a;回合制角色扮演游戏 故事背景 远古之战&#xff1a;在远古时代&#xff0c;圣族与魔族爆发大战&#xff0c;魔族领导者大邪神力量强大&#xff0c;圣族处于下风。圣族派出十二战士突袭&#xff0c;虽…...

本地大模型编程实战(23)用智能体(Agent)实现基于SQL数据构建问答系统(2)

本文将用 智能体(Agent) 实现对 SQLite 数据库的查询&#xff1a;用户用自然语言提出问题&#xff0c;智能体也用自然语言根据数据库的查询结果回答问题。 本次将分别在英文、中文环境下&#xff0c;使用 qwen2.5 、 MFDoom/deepseek-r1-tool-calling:7b 以及 llama3.1 做实验。…...

Flash-03

1-问题&#xff1a;Flash软件画两个图形&#xff0c;若有部分重合则变为一个整体 解决方法1&#xff1a;两个图形分属于不同的图层 解决方法2&#xff1a;将每个图形都转化为【元件】 问题2&#xff1a;元件是什么&#xff1f; 在 Adobe Flash&#xff08;现在称为 Adobe Anim…...

防火墙双机热备---VRRP,VGMP,HRP(超详细)

双机热备技术-----VRRP&#xff0c;VGMP&#xff0c;HRP三个组成 注&#xff1a;与路由器VRRP有所不同&#xff0c;路由器是通过控制开销值控制数据包流通方向 防火墙双机热备&#xff1a; 1.主备备份模式 双机热备最大的特点就是防火墙提供了一条专门的备份通道&#xff08;心…...

PC端-发票真伪查验系统-Node.js全国发票查询接口

在现代企业的财务管理中&#xff0c;发票真伪的验证至关重要。随着电子发票的普及&#xff0c;假发票问题日益严峻&#xff0c;如何高效、准确的对发票进行真伪查验&#xff0c;已经成为各类企业在日常运营中必须解决的关键问题。翔云发票查验接口做企业财务管理、税务合规的好…...

3.1部署filebeat:5044

beats是ELK体系中新增的一个工具&#xff0c;, 属于一个轻量的日志采集器。 1.安装&#xff08;每台&#xff09; # tar xf filebeat-6.4.1-linux-x86_64.tar.gz # mv filebeat-6.4.1-linux-x86_64 /usr/local/filebeat #yum -y install httpd #systemctl start httpd 2.测试…...

在 Windows 上配置 Ollama 服务并开放局域网访问

为了在局域网内共享 Ollama 服务&#xff0c;我们需要完成以下两步&#xff1a; 1、设置 Ollama 的环境变量 OLLAMA_HOST&#xff0c;使其监听局域网的 IP 地址。 &#xff08;1&#xff09; 配置 Ollama 服务的监听地址 Ollama 服务使用环境变量 OLLAMA_HOST 来指定监听的地…...

C#快速调用DeepSeek接口,winform接入DeepSeek查询资料 C#零门槛接入DeepSeek C#接入DeepSeek源代码下载

下载地址<------完整源码 在数字化转型加速的背景下&#xff0c;企业应用系统对智能服务的需求日益增长。DeepSeek作为先进的人工智能服务平台&#xff0c;其自然语言处理、图像识别等核心能力可显著提升业务系统的智能化水平。传统开发模式下&#xff0c;C#开发者需要耗费大…...

解决后端跨域问题

目录 一、什么是跨域问题&#xff1f; 1、跨域问题的定义 2、举例 3、为什么会有跨域问题的存在&#xff1f; 二、解决跨域问题 1、新建配置类 2、编写代码 三、结语 一、什么是跨域问题&#xff1f; 1、跨域问题的定义 跨域问题&#xff08;Cross-Origin Resource Sh…...

【教程】使用docker+Dify搭建一个本地知识库

现在AI火的一塌糊涂&#xff0c;再不搭建一个自己的AI知识库就有点落伍了&#xff0c;这里我是自己的windows11电脑。用了dockerdifydeepseek。 一、安装docker 网址&#xff1a;https://www.docker.com/ 什么是docker&#xff1f; Docker 是一种开放源代码的容器化平台&…...

微信小程序数据绑定与事件处理:打造动态交互体验

在上一篇中&#xff0c;我们学习了如何搭建微信小程序的开发环境并创建了一个简单的“Hello World”页面。然而&#xff0c;一个真正的小程序不仅仅是静态内容的展示&#xff0c;它需要与用户进行动态交互。本文将深入探讨微信小程序中的数据绑定和事件处理机制&#xff0c;通过…...

Spring MVC 的执行流程解析:从用户请求到响应返回

Spring MVC 是一种基于 Model-View-Controller 设计模式的 Web 框架&#xff0c;用于处理用户请求、执行相应的业务逻辑并返回响应。它广泛应用于 Java Web 开发&#xff0c;提供了灵活的架构和丰富的功能。 本文将详细介绍 Spring MVC 的执行流程&#xff0c;帮助你理解它是如…...

c++day5

作业&#xff1a; 编写一个如下场景&#xff1a; 有一个英雄Hero类&#xff0c;私有成员&#xff0c;攻击&#xff0c;防御&#xff0c;速度&#xff0c;生命值&#xff0c;以及所有的set get 方法 编写一个 武器 Weapon 类&#xff0c;拥有私有成员攻击力&#xff0c;以及set …...

Deepseek 实战全攻略,领航科技应用的深度探索之旅

想玩转 Deepseek&#xff1f;这攻略别错过&#xff01;先带你了解它的基本原理&#xff0c;教你搭建运行环境。接着给出自然语言处理、智能客服等应用场景的实操方法与代码。还分享模型微调、优化技巧&#xff0c;结合案例加深理解&#xff0c;让你全面掌握&#xff0c;探索科技…...

公共数据授权运营模式研究(总体框架、主要模式及发展趋势)

本报告以公共数据运营模式为核心&#xff0c;以释放公共数据价值为目标&#xff0c;深入分析公共数据概念及特征&#xff0c;厘清公共数据运营的内涵及本质&#xff0c;提出纵深分域数据要素市场运营体系的总体思路&#xff0c;构建了一座&#xff08;一个数据底座&#xff09;…...

本地开发用ASP.NET Core Web API项目创建及测试

1. 服务端代码&#xff08;C#&#xff09; 1.1 创建ASP.NET Core Web API项目 打开Visual Studio 2022。 选择“创建新项目”。 选择“ASP.NET Core Web API”模板&#xff0c;点击“下一步”。 输入项目名称&#xff08;如OracleApi&#xff09;&#xff0c;选择项目位置&…...

【虚拟仪器技术】labview操作指南和虚拟仪器技术习题答案(一)

今天是2025年2月24日&#xff0c;画的是fate/Grand Order里面的阿尔托莉雅.卡斯特&#xff0c;武内老师的画。 目录 第1章 第2章 第3章 第4章 第5章 关注作者了解更多 我的其他CSDN专栏 毕业设计 求职面试 大学英语 过程控制系统 工程测试技术 虚拟仪器技术 可编程…...

SpringCloud系列教程:微服务的未来(二十五)-基于注解的声明队列交换机、消息转换器、业务改造

前言 在现代分布式系统中&#xff0c;消息队列是实现服务解耦和异步处理的关键组件。Spring框架提供了强大的支持&#xff0c;使得与消息队列&#xff08;如RabbitMQ、Kafka等&#xff09;的集成变得更加便捷和灵活。本文将深入探讨如何利用Spring的注解驱动方式来配置和管理队…...

LLM之论文阅读——Context Size对RAG的影响

前言 RAG 系统已经在多个行业中得到广泛应用&#xff0c;尤其是在企业内部文档查询等场景中。尽管 RAG 系统的应用日益广泛&#xff0c;关于其最佳配置的研究却相对缺乏&#xff0c;特别是在上下文大小、基础 LLM 选择以及检索方法等方面。 论文原文: On the Influence of Co…...

C#实现本地AI聊天功能(Deepseek R1及其他模型)。

前言 1、C#实现本地AI聊天功能 WPFOllamaSharpe实现本地聊天功能,可以选择使用Deepseek 及其他模型。 2、此程序默认你已经安装好了Ollama。 在运行前需要线安装好Ollama,如何安装请自行搜索 Ollama下载地址&#xff1a; https://ollama.org.cn Ollama模型下载地址&#xf…...

git 查询包含某个文件夹的步骤

步骤 1&#xff1a;拉取最新的远程分支信息 确保本地缓存的远程分支信息是最新的&#xff1a; bash 复制 git fetch --all 步骤 2&#xff1a;遍历所有远程分支并检查目标文件夹 使用 git ls-tree 检查每个分支是否包含目标文件夹。以下脚本会列出所有包含 your_folder_pa…...

微软开源神器OmniParser-v2.0本地部署教程

安装python环境 我这里是以前安装好的版本&#xff1a;python 3.11.5&#xff0c;这里不再介绍&#xff0c;有需要的可以在网上找教程。 安装Anaconda 我这里是以前安装好的版本&#xff1a;conda 23.7.4&#xff0c;这里也不再介绍&#xff0c;有需要的可以在网上找教程。 …...

解决 Git 合并冲突:当本地修改与远程提交冲突时

目录 错误原因分析 解决方法 1. 暂存本地修改并合并&#xff08;保留更改&#xff09; 2. 丢弃本地修改&#xff08;强制覆盖&#xff09; 3. 暂存修改后合并&#xff08;推荐&#xff1a;使用 git stash&#xff09; 4. 选择性合并&#xff08;手动处理冲突文件&#xf…...