深入理解指针初阶:从概念到实践
一、引言
在 C 语言的学习旅程中,指针无疑是一座必须翻越的高峰。它强大而灵活,掌握指针,能让我们更高效地操作内存,编写出更优化的代码。但指针也常常让初学者望而生畏,觉得它复杂难懂。别担心,本文将用通俗易懂的语言,结合丰富的代码示例,带你逐步揭开指针初阶的神秘面纱,让你从入门到熟练掌握指针的基础概念与应用
二、指针是什么
2.1 概念剖析
指针是编程语言中的一个特殊对象,它的值是内存中另一个数据的地址。在计算机的内存世界里,每一个存储单元都有一个唯一的编号,就像我们住的房子都有门牌号一样,这个编号就是地址。而指针变量,就是专门用来存放这些地址的变量。
想象一下,内存是一个巨大的仓库,里面有无数个小格子(内存单元),每个小格子都存放着不同的数据。指针就像是一把带有格子编号(地址)的钥匙,通过这把钥匙,我们就能快速找到并访问对应的格子里的数据
2.2 代码示例
这段代码中,int *p
声明了一个指针变量p
,它的类型是int *
,表示它可以存放int
类型变量的地址。&a
获取了变量a
的地址,然后将这个地址赋值给p
。此时,p
就指向了变量a
所在的内存单元
2.3 内存编址与指针大小
计算机的内存编址方式与机器的位数密切相关。对于 32 位机器,假设有 32 根地址线,每根地址线在寻址时能产生一个电信号(正电或负电,对应 1 或 0),那么 32 根地址线产生的地址数量就是2^32个。由于每个地址标识一个字节(1Byte),所以 32 位机器可以编址的内存空间大小2^32,换算后就是 4GB(2^32/1024/1024/1024 GB)。
在 32 位机器上,地址是由 32 个 0 或 1 组成的二进制序列,这样的地址需要用 4 个字节的空间来存储,因此一个指针变量的大小就是 4 个字节。同理,64 位机器有 64 根地址线,能产生2^64个地址,可以编址的内存空间更大,而一个指针变量的大小为 8 个字节,才能存放一个地址。
总结来说,指针是用来存放地址的变量,地址唯一标识一块内存空间,指针的大小在 32 位平台是 4 个字节,在 64 位平台是 8个字节
三、指针和指针类型
3.1 指针类型的定义
变量有不同的类型,如整形int
、浮点型float
等,指针也有类型。指针的定义方式是type + *
,例如:
这里,char*
类型的指针用于存放char
类型变量的地址,short*
类型的指针用于存放short
类型变量的地址,以此类推。NULL
是一个特殊的指针常量,表示空指针,即不指向任何有效内存地址
3.2 指针类型的意义
指针类型在指针运算中起着关键作用,主要体现在两个方面:指针加减整数和指针解引用
3.2.1 指针加减整数
在这段代码中,pc
是char*
类型的指针,pi
是int*
类型的指针,它们都指向变量n
。当pc + 1
时,指针向前移动 1 个字节;而pi + 1
时,指针向前移动 4 个字节(假设在 32 位机器上,int
类型占 4 个字节)。这表明指针的类型决定了指针向前或向后移动一步的距离
3.2.2 指针解引用
在调试这段代码时可以发现,*pc = 0
只修改了n
所在内存空间的 1 个字节,而*pi = 0
则修改了n
所在内存空间的 4 个字节(假设int
类型占 4 个字节)。这说明指针的类型决定了对指针解引用时的权限,即能操作几个字节。char*
的指针解引用只能访问 1 个字节,而int*
的指针解引用能访问 4 个字节
四、野指针
4.1 野指针的概念
野指针是指指针指向的位置不可知(随机、不正确、没有明确限制)的指针。当指针变量在定义时未初始化,其值是随机的,此时去解引用这个指针,就相当于访问了一个不确定的地址,结果是不可预测的,可能导致程序崩溃或产生其他未定义行为。
4.2 野指针的成因
4.2.1 指针未初始化
在这段代码中,p
是一个未初始化的指针,它的值是随机的,对其进行解引用操作*p = 20
,会访问一个不确定的内存地址,这是非常危险的
4.2.2 指针越界访问
这里,数组arr
有 10 个元素,合法的下标范围是 0 到 9。但在for
循环中,i
的值可以达到 11,当i
为 10 和 11 时,指针p
超出了数组arr
的范围,成为野指针,此时对p
进行解引用操作会访问到不属于数组的内存区域,可能导致程序出错
4.2.3 指针指向的空间释放(动态内存开辟时讲解,此处简单提示)
在使用动态内存分配函数(如malloc
)时,如果释放了指针指向的内存空间,但没有及时将指针置为NULL
,那么该指针就会变成野指针。例如:
4.2.4返回局部变量的指针
局部变量在函数内部定义,其作用域仅限于函数内部。当函数执行结束,局部变量所占用的内存空间会被系统自动释放。若在函数中返回指向局部变量的指针,函数结束后,该指针指向的内存空间已无效,但指针本身依然存在,进而成为野指针
在上述代码中,test
函数返回了指向局部变量num
的指针。当test
函数执行完毕,num
所在内存空间被释放,p
就变成了野指针。此时对p
进行解引用操作,程序行为未定义,可能输出看似正确的值(若释放的内存未被覆盖),也可能导致程序崩溃
4.3 规避野指针的方法
4.3.1 指针初始化
在定义指针变量时,尽量给它一个初始值,可以是NULL
,也可以是指向合法内存地址的值。例如:
4.3.2 小心指针越界
在使用指针访问数组或其他内存区域时,要确保指针不会超出其合法范围。在访问数组元素时,要注意下标的边界条件。
4.3.3 指针指向空间释放及时置NULL
当释放了指针指向的内存空间后,立即将指针置为NULL
,这样可以避免误操作。例如:
4.3.4 指针使用之前检查有效性
在使用指针之前,检查指针是否为NULL
,以确保指针指向的是有效内存地址。例如:
4.3.5 避免返回局部变量的地址
五、指针运算
指针运算主要包括指针加减整数、指针减指针和指针的关系运算
5.1 指针加减整数
指针加减整数的运算规则与指针类型密切相关。前面已经介绍过,指针的类型决定了指针移动一步的距离。下面通过一个示例来进一步理解:
在这段代码中,vp
是float*
类型的指针,for
循环中vp++
每次使vp
向后移动 4 个字节(假设float
类型占 4 个字节),从而遍历整个values
数组,并将数组元素初始化为 0
5.2 指针减指针
指针减指针的结果是两个指针之间元素的个数(前提是两个指针指向同一块连续内存区域)。下面是一个计算字符串长度的函数示例:
在这个函数中,p
和s
都是char*
类型的指针,p
从字符串的起始位置开始,逐个字符向后移动,直到遇到字符串结束标志'\0'
。最后返回p - s
,即字符串的长度(不包括'\0'
)
5.3 指针的关系运算
指针的关系运算允许指向数组元素的指针与指向数组最后一个元素后面的那个内存位置的指针比较,但不允许与指向第一个元素之前的那个内存位置的指针进行比较。例如:
在第一个for
循环中,vp
从数组最后一个元素后面的位置开始,向前移动并初始化数组元素。虽然在大部分编译器上第二个简化的for
循环也能正常工作,但从标准角度来看,不建议这样写,因为标准并不保证其可行性
六、指针和数组
6.1 数组名与指针的关系
数组名在很多情况下表示的是数组首元素的地址。通过下面的代码可以验证:
6.2 用指针访问数组元素
由于数组名可以当成地址存放到一个指针中,因此我们可以使用指针来访问数组元素。例如:
在这段代码中,p
指向数组arr
的首元素,p + i
计算的是数组arr
下标为i
的元素的地址。通过这种方式,我们可以直接用指针遍历数组并访问元素:
这里,*(p + i)
就相当于arr[i]
,通过指针间接访问数组元素并输出其值
七、二级指针
7.1 二级指针的概念
指针变量也是变量,既然是变量就有地址。二级指针就是用来存放一级指针变量地址的指针。例如:
在这个例子中,a
是一个普通的int
类型变量,pa
是指向a
的一级指针,ppa
是指向pa
的二级指针
7.2 二级指针的运算
二级指针的运算主要涉及解引用操作
在这段代码中,*ppa
通过对ppa
中的地址进行解引用,找到的是pa
,因此*ppa = &b
就相当于pa = &b
,使pa
指向了变量b
。而**ppa
先通过*ppa
找到pa
,然后对pa
进行解引用操作*pa
,找到的是a
,所以**ppa = 30
就相当于*pa = 30
,最终相当于a = 30
八、指针数组
8.1 指针数组的定义
指针数组是一个数组,数组中的每个元素都是一个指针。例如:
这里,arr3
是一个指针数组,它有 5 个元素,每个元素都是一个int*
类型的指针。
8.2 指针数组的应用场景
指针数组在处理多个相同类型的指针时非常方便。在处理多个字符串时,可以使用指针数组来存储每个字符串的首地址:
在这个例子中,strs
是一个指针数组,每个元素都是一个指向char
类型的指针,分别指向不同的字符串。通过遍历指针数组,可以方便地访问每个字符串。
九、总结
本文详细介绍了指针初阶的各个重要知识点,包括指针的基本概念、指针类型、野指针、指针运算、指针与数组的关系、二级指针以及指针数组。指针作为 C 语言的核心特性之一,虽然具有一定的复杂性,但通过深入理解其原理,并结合大量的代码实践,我们能够逐步掌握它,并在编程中充分发挥其强大的功能。希望读者在学习指针的过程中,多思考、多实践,不断积累经验,为后续更深入的 C 语言学习和编程开发打下坚实的基础
相关文章:
深入理解指针初阶:从概念到实践
一、引言 在 C 语言的学习旅程中,指针无疑是一座必须翻越的高峰。它强大而灵活,掌握指针,能让我们更高效地操作内存,编写出更优化的代码。但指针也常常让初学者望而生畏,觉得它复杂难懂。别担心,本文将用通…...
Git 与 Git常用命令
Git 是一个开源的分布式版本控制系统,广泛用于源代码管理。与传统的集中式版本控制系统不同,Git 允许每个开发者在本地拥有完整的代码库副本,支持离线工作和高效的分支管理。每次提交时,Git 会对当前项目的所有文件创建一个快照&a…...
jupyterLab插件开发
jupyter lab安装、配置: jupyter lab安装、配置教程_容器里装jupyterlab-CSDN博客 『Linux笔记』服务器搭建神器JupyterLab_linux_布衣小张-腾讯云开发者社区 Jupyter Lab | 安装、配置、插件推荐、多用户使用教程-腾讯云开发者社区-腾讯云 jupyterLab插件开发教…...
IDEA+DeepSeek让Java开发起飞
1.获取DeepSeek秘钥 登录DeepSeek官网 : https://www.deepseek.com/ 进入API开放平台,第一次需要注册一个账号 进去之后需要创建一个API KEY,然后把APIkey记录保存下来 接着我们获取DeepSeek的API对话接口地址,点击左边的:接口…...
机器学习数学基础:19.线性相关与线性无关
一、线性相关与线性无关的定义 (一)线性相关 想象我们有一组向量,就好比是一群有着不同“力量”和“方向”的小伙伴。给定的向量组 α ⃗ 1 , α ⃗ 2 , ⋯ , α ⃗ m \vec{\alpha}_1, \vec{\alpha}_2, \cdots, \vec{\alpha}_m α 1,α 2…...
快速集成DeepSeek到项目
DeepSeek API-KEY 获取 登录DeekSeek 官网,进入API 开放平台 2. 创建API-KEY 复制API-KEY进行保存,后期API调用使用 项目中集成DeepSeek 这里只展示部分核心代码,具体请查看源码orange-ai-deepseek-biz-starter Slf4j AllArgsConstructo…...
Rocketmq 和 Rabbitmq ,在多消费者的情况下,可以实现顺序消费吗
在多消费者的情况下,RocketMQ 和 RabbitMQ 都可以实现顺序消费,但它们的实现机制和适用场景有所不同。以下是对两者的详细分析和对比: 1. RocketMQ 的顺序消费 1.1 实现机制 顺序消息:RocketMQ 支持顺序消息(Orderly …...
linux下安装【流媒体】SRS之安装与使用
一、 安装srs 这个是一个流媒体服务器。 1.1 github 获取源码 git clone https://github.com/ossrs/srs.git 或者下载国内的 git clone https://gitee.com/ossrs/srs 进去之后下载zip的 #直接使用当前最新的6.0release版本 ,我下载的是zip的 下载了之后上传到…...
Qt QSettings用法
一、概述 QSettings类是Qt框架中的一个重要类,它主要用于存储和访问应用程序的设置和配置。 二、QSettings的构造方式 1、基于组织名和程序名的构造方式(主要用于Windows注册表) 1、explicit QSettings(const QString &organization,c…...
python学opencv|读取图像(六十)先后使用cv2.erode()函数和cv2.dilate()函数实现图像处理
【1】引言 前序学习进程中,先后了解了使用cv2.erode()函数和cv2.dilate()函数实现图像腐蚀和膨胀处理的效果,相关文章链接为: python学opencv|读取图像(五十八)使用cv2.erode()函数实现图像腐蚀处理-CSDN博客 pytho…...
【大数据安全分析】大数据安全分析技术框架与关键技术
在数字化时代,网络安全面临着前所未有的挑战。传统的网络安全防护模式呈现出烟囱式的特点,各个安全防护措施和数据相互孤立,形成了防护孤岛和数据孤岛,难以有效应对日益复杂多变的安全威胁。而大数据分析技术的出现,为…...
[笔记.AI]Deepseek-R1 各参数版本的蒸馏模型对比
备注:信息主要通过Deepseek-R1获得(查询近一个月的在线资料并整理),然后我进行了相应整合。如有错误,希望指出,谢谢。 Deepseek-R1 蒸馏模型 对比维度1.5B7B8B14B32B70B 特有的突破性能力▸ 毫秒级响应(0.3…...
JAVA面向对象2(三大特征)
面向对象的三大特征:封装、继承、多态 封装: 封装,英文单词Encapsulation。 从广义的角度来说,将一块经常要使用的代码片段,定义到方法中,是封装。将多个方法和多个状态数据定义到类体中,也是一…...
Spring Cloud工程完善
目录 完善订单服务 启动类 配置文件 实体类 Controller Service Mapper 测试运行 完成商品服务 启动类 配置文件 实体类 Controller Service Mapper 测试运行 远程调用 需求 实现 1.定义RestTemplate 2.修改order-service中的OrderService 测试运行 Rest…...
AI大模型随机初始化权重并打印网络结构方法(以Deepseekv3为例,单机可跑)
背景 当前大模型的权重加载和调用,主要是通过在HuggingFace官网下载并使用transformer的库来加以实现;其中大模型的权重文件较大(部分>100GB),若只是快速研究网络结构和数据流变化,则无需下载权重。本文…...
介绍下SpringBoot常用的依赖项
Spring Boot 是一个用于快速开发 Spring 应用程序的框架,它通过自动配置和依赖管理简化了开发过程。以下是一些 Spring Boot 项目中常用的依赖项: 1. Spring Boot Starter Web 作用: 用于构建 Web 应用程序,包括 RESTful 服务。依赖项: spr…...
第四节 docker基础之---dockerfile部署JDK
本地宿主机配置jdk 创建test目录: [rootdocker ~]# mkdir test 压缩包tomcat和jdk上传到root/test目录下: 本机部署Jdk 解压jdk: [rootdocker test]# tar -xf jdk-8u211-linux-x64.tar.gz [rootdocker test]# tar -xf apache-tomcat-8.5.…...
Vue基础:index.html、App.vue、main.js三个文件的联系
index.html、App.vue、main.js三个文件的联系 当vue项目npm run dev启动成功后, 浏览器就可以通过路径访问页面,那么这个页面到底展示的是哪个文件里的内容呢? 如果对前端vue有一定的基础知识,这篇文章可忽略。 在vue项目的目录结…...
数据库 绪论
目录 数据库基本概念 一.基本概念 1.信息 2.数据 3.数据库(DB) 4.数据库管理系统(DBMS) 5.数据库系统(DBS) 二.数据管理技术的发展 1.人工管理阶段 2.文件系统阶段 3.数据库系统阶段 4.数据库管…...
26~31.ppt
目录 26.北京主要的景点 题目 解析 27.创新产品展示及说明会 题目 解析 28.《小企业会计准则》 题目 解析 29.学习型社会的学习理念 题目 解析 30.小王-产品展示信息 题目 解析 31.小王-办公理念-信息工作者的每一天 题目 解析 26.北京主要的景点…...
AutoMQ 如何实现没有写性能劣化的极致冷读效率
前言 追赶读(Catch-up Read,冷读)是消息和流系统常见和重要的场景。 削峰填谷:对于消息来说,消息通常用作业务间的解耦和削峰填谷。削峰填谷要求消息队列能将上游发送的数据堆积住,让下游在容量范围内消费…...
启动gateway时Failed to configure a DataSource
问题 在启动网关时候启动失败,报错: 原因很明显,就是没有配制数据库连接信息 实际上是因为在网关模块中导入的某个依赖里面引入了MyBatis的依赖,导致启动的时候自动配置数据库源 但是在这个网关模块中是不需要数据数据库的 解决...
node 程序占用处理方法与后台运行方法
程序占用 如果你在关闭终端后重新运行 node server.js,但提示端口 3000 被占用,说明之前的服务器进程仍然在后台运行。以下是解决方法: 1. 检查后台运行的 Node.js 进程 首先,检查是否有 Node.js 进程正在占用端口 3000。 在 L…...
C# OpenCV机器视觉:对位贴合
在热闹非凡的手机维修街上,阿强开了一家小小的手机贴膜店。每天看着顾客们自己贴膜贴得歪歪扭扭,不是膜的边缘贴不整齐,就是里面充满了气泡,阿强心里就想:“要是我能有个自动贴膜的神器,那该多好啊…...
【计算机网络】TCP/IP 网络模型有哪几层?
目录 应用层 传输层 网络层 网络接口层 总结 为什么要有 TCP/IP 网络模型? 对于同一台设备上的进程间通信,有很多种方式,比如有管道、消息队列、共享内存、信号等方式,而对于不同设备上的进程间通信,就需要网络通…...
本地部署Deepseek R1
使用Ollama open-webui部署Deepseek R1 一、安装Ollama 官网地址:https://ollama.com/,点击下载按钮选择windows版本。并安装 打开命令提示符输入ollama,出现一下提示命令表示ollama安装完成 二、使用Ollama下载deepseek R1不同模型 打开o…...
PHP盲盒商城系统源码 晒图+免签+短信验证+在线回收 thinkphp框架
源码介绍 PHP盲盒商城系统源码 晒图免签短信验证在线回收 thinkphp框架 源码前端uniapp开发,可以打包成APP(非H5封壳)H5,接其他平台支付通道,前后端全开源 H5盲盒首页可以直接开盒新UI 修复优化BUG,修复无…...
[Do374]ansible-nagivator考前整理
[Do374]ansible-nagivator考前整理 1. Ansible-Navigator 升级后的变化1.1 主要变化1.2 重大改变 2. ansible主要配置文件2.1 .ansible-navigator.yml2.2 ansible.cnf 3. 常用模块3.1 file模块3.2 copy模块3.3 user模块和lookup模块3.4 yum和yum_repository模块3.5 systemd和se…...
deepseek+kimi自动生成ppt
打开deepseek官网,输入详细的需求,让他生成个ppt 接着deepseek开始思考生成了 接着复制生成了的内容 打开kimi粘贴刚才deepseek生成的内容 可以一键生成啦,下载编辑使用吧...
循环神经网络学习01——transformer:输入部分-嵌入层位置编码
一、介绍 1、核心思想 利用自注意力机制来捕获输入序列中各元素之间的全局依赖关系,无论这些元素之间的实际距离有多远。 自注意力机制:允许模型在处理序列的每个元素时,考虑到序列中的所有其他元素,从而捕捉它们之间的关系和依…...
centos系统清理docker日志文件
在CentOS系统中,Docker日志文件的不断增长可能会占用大量磁盘空间,影响系统性能和正常运行。为了保持系统的健康状态,需要定期清理Docker日志文件。本文将详细介绍如何在CentOS系统上清理Docker日志文件的具体步骤和方法。 Docker日志文件位…...
低成本+高性能+超灵活!Deepseek 671B+Milvus重新定义知识库搭建
“老板说,这个项目得上Deepseek,还得再做个知识库...” 还有哪个开发者,最近没听到这样的抱怨? Deepseek爆火,推理端的智能提速,算力成本急剧下降,让不少原本不想用大模型,用不起大模型的企业&a…...
Windows 本地部署大模型 OpenWebUI+Ollama
安装Ollama Ollama官方网址:https://ollama.com 下载运行大模型 在Ollama官网中查看需要下载的大模型 https://ollama.com/library 复制图片中的链接 打开cmd,运行此命令(此过程会时间会很久) 下载Miniconda Miniconda作用是…...
【iOS自动化】Xcode配置WebDriverAgent
WebDriverAgent 是 iOS 端自动化测试的工具,这里记录下 MacOS 环境 Xcode 如何配置 WebDriverAgent。 【重要】环境准备 ‼️ 注意:Xcode 版本需要支持对应的 iOS 版本,而 Xcode 版本又依赖 MacOS 版本;在开始部署前,…...
RabbitMQ 延迟队列
1.延迟队列插件安装(版本号要对其) Releases rabbitmq/rabbitmq-delayed-message-exchange GitHub 下载的文件: rabbitmq_delayed_message_exchange-3.13.0.ez 直接复制到以下文件夹: \RabbitMQ Server\rabbitmq_server-3.13.7\plugins\ 执行命令…...
JVM-Java虚拟机
基础知识 JVM的定义与作用 定义:JVM是Java语言的一部分,它是一个虚拟的计算机,通过它可以执行Java程序。 作用: 跨平台支持:实现了“编译一次,到处运行”的目标。 自动内存管理:通过垃圾回收…...
Unity底层C#处理机制深度解析
一、Unity脚本执行架构 Unity采用分层架构处理C#脚本,核心由以下组件构成: 脚本引擎层 Mono Runtime(旧版本) IL2CPP(2015版本) Burst Compiler(DOTS体系) 原生交互层 Runtime …...
【WB 深度学习实验管理】使用 PyTorch Lightning 实现高效的图像分类实验跟踪
本文使用到的 Jupyter Notebook 可在GitHub仓库002文件夹找到,别忘了给仓库点个小心心~~~ https://github.com/LFF8888/FF-Studio-Resources 在机器学习项目中,实验跟踪和结果可视化是至关重要的环节。无论是调整超参数、优化模型架构,还是监…...
MFC 应用最小化到系统托盘
本指南将实现 MFC 应用程序在关闭时最小化系统托盘的功能,并左键和右键系统托盘图标进行交互。 目标: 左键点击托盘图标:恢复对话框窗口。右键点击托盘图标:弹出右键菜单,提供 恢复窗口 和 退出程序 两个选项。退出时…...
C++ ——从C到C++
1、C的学习方法 (1)C知识点概念内容比较多,需要反复复习 (2)偏理论,有的内容不理解,可以先背下来,后续可能会理解更深 (3)学好编程要多练习,简…...
【OCPP】ocpp1.6J协议框架说明
目录 1.简介 1.1.本文件的目的 1.2.目标受众 1.3. OCPP-S and OCPP-J 1.4. 约定 1.5.定义和缩写 1.6.参考 2.优点和问题 3.连接 3.1.客户要求 3.1.1.连接URL 3.1.2.OCPP版本 3.1.3.打开HTTP请求的示例 3.2.服务器响应 3.3.更多信息 4.RPC框架 4.1.介绍 4.1.1…...
Swipe横滑与SwipeItem自定义横滑相互影响
背景 vue项目,H5页面,使用vant的组件库轮播组件<Swipe>,UI交互要求,在每个SwipeItem中有内容,可自横滑,查看列表内容 核心代码 <template><Swipeclass"my_swipe":autoplay&quo…...
渗透利器工具:Burp Suite 联动 XRAY 图形化工具.(主动扫描+被动扫描)
Burp Suite 联动 XRAY 图形化工具.(主动扫描被动扫描) Burp Suite 和 Xray 联合使用,能够将 Burp 的强大流量拦截与修改功能,与 Xray 的高效漏洞检测能力相结合,实现更全面、高效的网络安全测试,同时提升漏…...
C# 学习目录
以下内容仅供参考 基础概念 数据类型(使用与定义)-CSDN博客 var使用-CSDN博客 运算符(new、sizeof、is、as)_new 运算符-CSDN博客 数据结构 数组定义与使用-CSDN博客 动态数组和泛型集合-CSDN博客 字典(Dictonary)-CSDN博客 集合类型࿰…...
react native学习【9】——动态路由
react native学习【9】——动态路由 1、进入终端2、动态路由dynamic router3、编写app/_layout.jsx布局文件4、创建动态路由5、完善index.jsx文件6、完善[id].jsx文件扩展运算符...7、完整的index.jsx文件1、进入终端 2、动态路由dynamic router 官方网站 视频中的举例:当我们…...
[AI]Mac本地部署Deepseek R1模型 — — 保姆级教程
[AI]Mac本地部署DeepSeek R1模型 — — 保姆级教程 DeepSeek R1是中国AI初创公司深度求索(DeepSeek)推出大模型DeepSeek-R1。 作为一款开源模型,R1在数学、代码、自然语言推理等任务上的性能能够比肩OpenAI o1模型正式版,并采用MI…...
LeetCodehot 力扣热题100 验证二叉搜索树
class Solution {vector<int> nums; // 用来存储二叉树节点值的数组 public:bool isValidBST(TreeNode* root) {inorder(root); // 中序遍历二叉树,填充 nums 数组// 遍历 nums 数组,检查是否为严格递增序列for(int i0; i<nums.size()-1; i){…...
使用Kickstart配置文件封装操作系统实现Linux的自动化安装
使用Kickstart配置文件封装操作系统实现Linux的自动化安装 创建ks.cfg配置文件 可以使用已经安装完成的Linux操作系统中的/root目录下的anaconda.cfg配置文件 注意,配置文件会因为kickstart的版本兼容性的问题导致无法安装报错需要在实际使用过程中删除某些参数 …...
前端开发架构师Prompt指令的最佳实践
前端开发架构师Prompt 提示词可作为系统提示词使用,可基于用户的需求输出对应的编码方案。 本次提示词偏向前端开发的使用,如有需要可适当修改关键词和示例。 推荐使用 Cursor 中作为自定义指令使用Cline 插件中作为自定义指令使用在力所能及的范围内使…...
flink判断两个事件之间有没有超时(不使用CEP)
1.为啥不使用cep呢,cep的超时时间设置不好配置化,无法满足扩展要求 2.超时怎么界定。A事件发生后,过了N时间,还没有收到B事件,算超时。 代码如下: import com.alibaba.fastjson.JSONObject; import lombo…...