- 博客(76)
- 收藏
- 关注
原创 动态规划 - 简单多状态 dp 问题
本文系统性地总结了力扣平台上8道经典的动态规划题目,包括按摩师问题、打家劫舍系列、股票买卖系列等。针对每道题目详细分析了状态表示、状态转移方程、初始化方法、填表顺序和返回值设计。特别对股票买卖问题中的冷冻期、手续费、交易次数限制等复杂条件进行了深入剖析,提供了清晰的解题思路和代码实现。通过多维度状态细分(如买入/卖出状态、交易次数记录)和分类讨论(如环形问题转为线性),展示了动态规划解决复杂问题的通用方法,为类似问题的解决提供了可复用的模板。
2025-06-23 12:15:39
278
原创 C++ - vector 的使用
本文详细介绍了C++标准库中vector容器的主要特性与使用要点。首先阐述了vector作为顺序表的本质,解析了其接口函数包括构造函数、迭代器、容量管理(resize和reserve)及扩容机制(VS以1.5倍、Linux以2倍扩容)。通过与string的对比,强调vector<char>与string的本质区别(后者包含'\0'),并指出vector不支持find等string特有功能。在使用注意事项方面,重点说明了隐式类型转换、范围for的引用优化、迭代器的封装价值及其在算法中的通用性(如f
2025-06-21 09:24:45
630
原创 string的底层实现
string 实际上是一个叫做 basic_string 的模板类;以前我们所理解的串都是char* 的字符串,而实际上由于编码的原因还有几种串:char、wchar_t(宽字符)、char16_t(UTF16)、char32_t(UTF32);
2025-06-19 09:49:35
856
原创 动态规划 - 路径问题
本文介绍了若干动态规划路径问题的解法,包括不同路径、带障碍路径、珠宝价值、下降路径最小和、最小路径和及地下城游戏。通过五步法(状态表达式、转移方程、初始化、填表顺序、返回值)系统分析每道题目,重点讲解如何通过多开辟行列简化初始化,以及如何通过状态转移方程求解最优路径。针对不同题目特性(如障碍物、路径方向限制等)提供了相应的状态转移策略,并强调了填表顺序和下标的正确映射。典型解法包括:使用二维DP表记录路径数或最优值,通过比较相邻状态推导当前状态,最后返回目标位置的值。
2025-06-15 13:57:18
914
原创 c++ - 关于 string 的练习题
本文整理了4道字符串处理经典算法题:1)反转字母(双指针交换法);2)首个不重复字符(哈希统计法);3)大数相加(模拟进位运算);4)末单词长度(反向查找法)。重点讲解了各题的解题思路和优化方法,包括使用isalpha判断字母字符、计数排序统计字符频率、处理进位问题等技巧。每道题都提供了参考代码和关键说明,强调合理使用string类接口函数的重要性,如getline读取带空格字符串、rfind反向查找等。
2025-06-12 16:15:57
1166
原创 leetcode - 分治-三路划分快速排序总结
分治,即分而治之;将大问题拆解为相同或者相似的子问题,然后在这个子问题额基础上继续进行划分,直到划分到某一个位置为止(该子问题可以快速解决);其中,排序之中,快排、归并排序就是典型的分治思想;其中三路划分版本快排:首先第一步是寻找一个基准值 key , 我们目标是将数组nums 划分为三个部分,一部分小于 key , 一部分等于 key , 另一部分大于key ;这样划分之后,便不用管等于key 的区域,因为中间的这部分区域中的数据一定是到了最终合适的位置上;
2025-06-10 09:45:18
581
原创 模拟 - #介绍 #题解
本文主要介绍了模拟类题目的解题思路和具体实现方法。通过5道力扣例题(替换问号、提莫攻击、Z字形变换、外观数列、数青蛙)详细讲解了模拟题的解题过程:1. 理解题意,分析算法流程;2. 将思路转换为代码实现;3. 针对特殊情况处理优化。文章强调模拟题需要先在纸上理清逻辑,再通过找规律等方式优化代码性能。每道题都提供了详细的分析过程和代码示例,展示了从暴力模拟到优化算法的解题思路。
2025-06-08 17:48:12
671
原创 C++ - string 的使用 #auto #范围for #访问及遍历操作 #容量操作 #修改操作 #其他操作 #非成员函数
本文介绍了C++11 中的auto 、范围for,从string 对象访问遍历操作、容量操作、对象修改操作、不同平台下string 的扩容机制、find 和 replace 替换指定字符、其他操作、非成员函数深度讲解string 的使用;
2025-06-08 17:41:42
241
原创 位运算 #常见位运算总结 #题解
本文总结了常见的位运算操作及其在LeetCode算法题中的应用。内容涵盖基础位运算操作(左移、右移、按位与/或/异或)、位运算技巧(提取最右侧1、去除最右侧1等),并通过10道LeetCode题目(如位1计数、汉明距离、只出现一次的数字等)展示了位运算的实际应用。特别强调了位运算在优化空间复杂度方面的优势,如利用单个变量的比特位实现哈希表功能(位图思想)。文章还详细解析了每道题的位运算解法,包括代码实现和优化思路,为处理二进制相关算法问题提供了实用指导。
2025-06-01 10:26:55
885
原创 C++ - STL #什么是STL #STL的版本 #闭源开源 #STL的六大组件
STL(标准模板库)是C++标准库的核心组件,由Alexander Stepanov等人在惠普实验室开发,采用泛型编程范式提供高效的数据结构与算法实现。主要版本包括HP原始版本、P.J.商业版本和SGI开源版本,各版本底层实现存在差异。STL包含六大组件,其中内存池(空间配置器)是提升容器效率的关键机制。STL作为可复用的软件框架,在C++开发中具有重要地位,需要开发者熟练掌握其接口使用。开源与闭源实现各有优缺点,STL的不同版本也体现了这一特性。
2025-05-31 10:50:47
1130
原创 C++ - 模板(一) #泛型编程 #函数模板 #类模板
本文介绍了C++中泛型编程的核心概念——模板。主要内容包括:函数模板:通过template声明通用代码框架,编译器根据实参类型自动生成具体函数,解决代码复用问题。重点讲解了隐式/显式实例化及模板参数匹配原则。类模板:允许创建可处理多种数据类型的通用类,必须显式实例化。以栈类为例演示了类模板实现,强调成员函数定义需与声明放在同一文件。模板优势:相比typedef和函数重载,模板能更好实现类型无关的通用代码,提升代码复用率和可维护性。文中通过交换函数和栈类的改造案例,展示了模板的实际应用价值。
2025-05-30 10:16:38
1029
原创 动态规划 - 斐波那契数列模型
本文介绍了leetcode中几道典型的斐波那契数列模型相关的题目。通过详细分析问题、定义状态表示、推导状态转移方程、初始化、填表顺序和返回值等步骤,给出了清晰的解题思路和代码实现。文章重点对“第N个泰波那契数”、“三步问题”、“最小花费爬楼梯”和“解码方法”等题目进行了深入讲解,并提供了空间优化技巧和多维解法。同时,强调了动态规划问题的边界处理和下标映射关系的重要性,为读者提供了一套完整的动态规划解题方法论。
2025-05-29 09:37:01
834
原创 C++ - 内存管理 #new/delete #operator new/operator delete #placement-new #异常
new[] 的时候转换成指令知道自己要new 多少个对象,但是delete 由于不知道new 了多少个对象,也就不知道自己要调用多少次析构函数;所以new[] 开辟空间时会在原基础上多开辟4byte 的空间,而返回的p4 是这4byte 之后的地址,即返回的是本应开辟的空间的起始地址;当delete[] 转换成指令之后会从实际应该开的空间的首地址(p4)往前减 4byte 的空间去获取该4byte 空间中存放的值,那么delete[] 便就会知道需要调用多少次析构函数;当operator delete[]
2025-05-28 09:56:41
1062
原创 leetcode - 前缀和
本文详细解析了前缀和与后缀和在解决数组问题中的应用,文章通过具体例题如二维前缀和、寻找数组中心下标、除自身以外数组的乘积等,展示了如何高效利用前缀和数组优化计算。同时,针对连续子数组问题,介绍了结合哈希表快速查找的技巧。此外,还探讨了同余定理在解决子数组和问题中的关键作用,以及如何通过修正负数取余结果确保正确性。最后,文章提供了各题目的参考代码实现,帮助读者深入理解算法思路和实现细节。
2025-05-24 12:08:26
873
原创 高效掌握二分查找:从基础到进阶
本文介绍了二分查找算法及其在多个leetcode题目中的应用。二分查找的核心在于利用数据的二段性,通过不断缩小查找范围来快速定位目标值。文章详细讲解了朴素的二分查找模板,并在此基础上扩展了查找左边界和右边界的模板。通过多个具体题目的分析,展示了如何根据问题的特点选择合适的二分查找策略,并处理循环条件、中间点计算等细节问题。最后,文章总结了二分查找的本质及其在不同场景下的应用,帮助读者更好地掌握这一算法。
2025-05-19 14:59:32
1001
原创 C++ - 类和对象 #取地址运算符重载 #构造函数 #类型转换 #友元 #static 成员 #内部类 #匿名对象 #对象拷贝时编译器的优化
本文深入探讨了C++中的多个关键概念,包括取地址运算符重载、构造函数的初始化列表、类型转换、友元、静态成员、内部类、匿名对象以及对象拷贝时的编译器优化。文章详细解释了const成员函数的作用、取地址运算符的重载方式、初始化列表的必要性及其使用场景。此外,还介绍了类型转换的隐式与显式机制、友元函数与友元类的应用、静态成员变量的特性及其初始化方法。内部类的定义及其与外部类的关系、匿名对象的生命周期及其使用场景也被详细讨论。最后,文章分析了编译器在对象拷贝时的优化策略,强调了编译器如何在不影响程序正确性的前提下提
2025-05-19 10:19:08
728
原创 leetcode - 滑动窗口问题集
滑动窗口,无非就是利用两个同向双指针,根据题干的要求设置入窗口的条件、出窗口的条件以及什么时候更新结果;需要注意的是,更新结果的地方是不确定的,可能是在入窗口后更新结果,也有可能是在出窗口之后才更新结果,需要根据具体的题意定夺;
2025-05-14 10:01:09
1101
原创 VS小技巧:如何在一个项目中添加其他项目
在Visual Studio中,可以通过右击“解决方案”并选择“添加”->“现有项目”来将其他项目添加到当前解决方案中。例如,添加了“test_25_2_11”项目后,如果“test_25_5_5”项目仍为加粗字体,运行时将执行“test_25_5_5”项目中的代码。将关联性强的项目放在同一解决方案下,便于切换和管理,但需注意文件命名以避免混淆。要运行添加的项目“test_25_2_11”,可以通过右击该项目选择“生成”,或将其设为启动项目后按Ctrl+F5运行。
2025-05-09 19:09:47
396
原创 leetcode - 双指针问题
经过以上练习,我们应该可以显然地感受到这类题的特点:从两端向中间出发,逐渐缩小数据范围,必要时,还可以借助于数据的单调性一起使用;借助于单调性会极大地提高代码的效率;
2025-05-09 19:04:04
1046
原创 C++ - 类和对象 #日期类的实现
首先,要实现日期类,构造函数是一定是要我们显式实现的,但因为日期类的成员变量均为内置类型且不涉及资源,所以其拷贝构造函数、赋值运算符重载函数、析构函数均无需我们显式实现,编译器自动生成的便够用;以及还需要我们实现日期类相关的功能,例如:日期相减、日期加天数等;注:1、类中成员函数的声明和定义分离时,在定义该函数的时候需要指定类域2、缺省参数只能在声明给,在定义中不给此处日期类的实现,我们会分文件,将类的主体放在Date.h 之中,将日期类中成员函数的定义放到Date.cpp 中;
2025-05-08 11:02:18
1120
原创 C++ - 类和对象 #类的默认成员函数 #构造函数 #析构函数 #拷贝构造函数 #运算符重载函数 #赋值运算符重载函数
1、当我们不显式实现这个函数的时候编译器会默认帮我们生成,这个函数就是默认成员函数,默认成员函数有6个,在C++11 中还会增加2个;但是编译器帮我们实现的默认成员函数可能并不会符合我们的预期,所以此时就需要我们自己来实现这个默认成员函数;在这个过程中,我们需要理解编译器的默认生成的行为、以及我们如何实现;2、构造函数是特殊的成员函数,在对象实例化时去初始化对象;3、析构函数并不是完成对对象本身的销毁,对象在销毁时会自动调用析构函数,完成对象中资源的清理释放工作。4、如果一个构造函数的第一个参数
2025-05-04 16:36:19
1056
1
原创 C++ - 类和对象 # 类的定义 #访问限定符 #类域 #实例化 #this 指针 #C++ 与 C语言的比较
class为定义类的关键字,Stack 为类的名字,{} 中为类的主体,注意类定义结束的时候其后面的分号不可以省略。类体中的内容称为类的成员:类中的变量称为类的属性或成员变量,类中的函数称为类的方法或者成员函数。为了区分成员变量,一般习惯上成员变量会加一个特殊的标识,如成员变量前或者后面加 _ 或者 m 开头,注意C++ 中这个并不是强制的,只是一些惯例,具体需要看公司的要求;C++ 中 struct 也可以定义类,
2025-04-27 11:21:24
924
原创 C++ - #命名空间 #输入、输出 #缺省参数 #函数重载 #引用 # const 引用 #inline #nullptr
引用在实践中主要是于引用传参和引用做返回值中减少拷贝提高效率和改变引用对象时同时改变被引用对象(相较于传址调用,改变形参也可以改变实参);引用传参跟指针传参功能时类似的,引用传参相对更加方便一些;引用返回值的场景相对比较复杂,本篇只做简单的介绍,更加深入的探索会在后文的“类和对象”之中;引用和指针在实践当中相辅相成,功能有重叠性,但是各有特点,互相不可替代;C++的引用跟其他语言的引用(如Java)是有很大的区别的,除了用法,最大的特点是:C++引用定义后不可以更改指向,但是Java 的引用可以更改指
2025-04-15 17:07:16
693
原创 C++ - 认识C++
随着AI的发展,未来是否会利用AI工具来重写C++代码?AI 工具(如 Copilot)可提升 C++ 开发效率,自动生成代码或优化算法,但难以完全替代人工。例如,复杂的内存管理和性能优化仍需开发者深度参与;C++ 系统的底层逻辑和硬件依赖使得 AI 重写风险极高,尤其在需要严格实时性的场景(如航空航天控制系统);重写,即使在有AI 工具的情况下,仍然是一个巨大的消耗,企业更倾向于维护现有 C++ 系统而非重写,尤其涉及关键基础设施时;若未来 AI 自举编程技术成熟,可能催生更高效的二进制级语言,
2025-03-20 15:08:08
852
原创 数据结构与算法 - 二叉树 #四种遍历方式 #求二叉树的结点个数 #叶节点个数 #树的高度 #第K层的结点个数 #查找值为x的结点 # 销毁 #判断二叉树是否为完全二叉树
1、前序遍历(前根遍历):若二叉树为空,则返回空操作; 否则访问根节点的操作发生在遍历其左右子树之前,即其的访问顺序为:根节点、左子树、右子树2、中序遍历(中根遍历):若二叉树为空,则返回空操作;否则访问根节点的操作发生在遍历左右子树之中,即访问的顺序为:左子树、根节点、右子树3、后序遍历(后根遍历):若二叉树为空,则返回空操作;否则访问根节点的操作发生在遍历左右子树之后,即访问的顺序为:左子树、右子树、根节点;即从左向右先叶子后节点的方式遍历访问左右子树,最后访问的是根节点;4、层序遍历:若二叉树
2024-12-25 08:35:37
1052
原创 数据结构与算法 - 归并排序 #递归版本 #非递归版本 #文件归并
1、归并排序(MERGE-SORT) 是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer) (分治可以理解为递归) 的一个非常典型的应用。将有序的子序列进行合并得到完全有序的序列;即先使每个子序列有序,再使得子序列段间有序。若将两个有序的子序列合并为一个有序的序列,称为二路归并;2、外排序(External sorting)是能够处理极大数据量的排序算法;通常来说,外排序的数据不能一次性全部装入内存之中,只能放在读写较慢的外存储器之中(eg.硬盘)。外排
2024-12-24 15:01:47
1002
原创 数据结构与算法 - 快速排序 #hoare版本 #挖坑法 #lomuto前后指针 #三数取中 #三路划分 #introsort自省排序
快速排序是Hoare 于 1962年提出的一种二叉树结构的交换排序方法;其基本思想为:任取待排序元素序列中的某元素作为基准值,然后再根据所得到的基准值的下标将待排序序列分割成两子序列,其中左子序列中所有元素均小于等于基准值,右子序列中给的所有的元素均大于等于基准值,然后其左右子序列又重复该过程,直到所有元素均排到其应该到的相应的位置上为止;
2024-12-24 09:40:19
831
原创 数据结构与算法 - 排序 #直接插入排序 #希尔排序 #直接选择排序 #堆排序 #冒泡排序 #快速排序(hoare、挖坑、lomuto) #非递归版本快速排序 #归并排序 #非递归版本归并 #计数排序
1、直接插入排序:将待排序的数据往有序的序列中插入,将该数据与序列中的数据依次比较,在序列中找到合适的位置并挪动数据将这个位置空出来,然后再将该待排序数据放到该位置上;2、希尔排序:又称缩小增量法;先选定一个整数(通常是 gap=n/3+1), 将待排序序列分为多组,所有的距离相等的数据分在同一组中,并对每一组中内的数据进行排序;然后再gap=gap/3+1 将数组再分组(组会越来越少),并进行插入排序,当gap为1的时候,就相当于直接插入排序;3、直接选择排序:在待排序列中找最大值、最小值,找到之
2024-12-23 19:48:47
1253
原创 数据结构与算法 - 树-堆 相关算法的时间复杂度分析 #向上调整 #向下调整 #向上调整建堆 #向下调整建堆 #堆排序
向上调整建堆是将本节点与其祖先节点进行比较,而节点所在的层数越大,那一层的节点数越多,该层一个节点所要向上调整的次数也就越多,即节点数量多的层*调整次数多,节点数量少的层*调整次数少;而向下调整是将本节点与其子孙节点进行比较,而层数越大,该层的节点数量越多,调整的次数少;层数越小,该层的节点数量越少,调整的次数越多,即节点数量多的层*调整次数少,节点数量少的层*调整次数多;
2024-12-23 18:21:15
827
原创 leetcode解题 - #用栈实现队列 #用队列实现栈 #循环队列
对于此题,我们首先需要思考,该循环队列用什么实现合适;我们先来思考能否用链表实现;必然是会用到循环链表(仅使用单链表实现循环队列是非常麻烦的,因为单链表中的结点(假设该结点存在上一结点与下一结点)只能找到下一结点,找该结点的上一结点是非常麻烦的;当然,可以使用双链表来实现,但是此处还是先考虑"简单、节约空间"的结构是否能解决此问题),循环链表中的尾结点中的next 指向头结点;(假设用单向循环链表来实现会使用到两个变量phead 与 ptail 分别指向循环队列中的头和尾)假设题干要求循环队列有
2024-10-22 21:49:17
975
原创 数据结构与算法 - 树 #数的概念 #二叉树 #堆 - 堆的实现/堆排序/TOP-K问题
1、树是一种非线性的数据结构,它是由 n (n>=0) 个有限结点组成的具有层次关系的集合,将此结构叫做树的原因是因为此结构像一棵倒挂的树,即其根在上,而叶朝下;2、二叉树(Binary Tree) 是n (n>=0) 个结点的有限集合,该集合或者为空集(即空二叉树),或者由一个根节点和两棵互不相交的、分别称为根节点的左子树和右子树的二叉树构成,3、堆是一种数据结构,可以在其中插入、删除数据,让其结构仍为堆;利用堆来进行选数是非常方便的,不用我们自己去建堆、调整。(注:以后在c++中还有一种数据结构
2024-10-18 21:46:21
1134
原创 数据结构与算法 - 队列
队列:只允许在一端(队头)进行插入数据的操作,在另外一端(队尾)进行删除数据操作的特殊线性表,并且队列具有先进先出(FIFO)的特点;队列最好不要用数组来实现,因为尾插或者头删存在一个一个挪动数据的可能性而导致效率低下;可以使用链表来实现,介于当可以用单链表实现的时候就采用单链表,能节约一点空间是一点空间,当单链表不能完成当前问题的时候再考虑使用双链表。队列可以用单链表实现,故而本文中的队列使用单链表来实现的;
2024-10-14 15:28:26
933
原创 数据结构与算法 - 栈
栈是一种特殊的线性表,只允许在固定的一端(栈顶)进行插入和删除元素的操作。进行数据的插入与删除的一端称为栈顶,另外一端称为栈底;栈中的元素遵循先进先出(LIFO:Last In First Out)的原则;压栈:将数据放入栈中的操作称为压栈/入栈,在栈顶进行入栈的操作出栈:将栈中的数据删除也称为出栈,出数据在栈顶荐用数组,因为数组的CPU高速缓存命中率高;
2024-10-13 15:08:47
640
原创 数据结构与算法 - 顺序表与链表的区别
顺序表与链表各有优缺,很难说明二者谁更优;准确来说这两个结构之间是相辅相承的关系;1、顺序表(动态顺序表):逻辑结构上是线性的,物理结构上也上一定是线性结构支持随机访问(利用下标)但是在任意位置上插入或者删除数据需要一个一个地挪动数据以保证顺序表结构的连续性,时间复杂度为O(N),效率不高;并且插入数据,会面临扩容的问题,扩容本身就存在消耗,就地扩容消耗不大(开辟空间,返回该空间的地址),但倘若是异地扩容,便会找新空间,拷贝旧空间的数据到新空间中,释放旧空间中的数据,返回新空间的地址;并且扩容的
2024-10-13 15:08:18
976
原创 数据结构与算法 - 单链表 & 双链表 -- 概念+实现
链表有八种(下述三种特性任意组合):单向或者双向带头或者不带头循环或者非循环1、其中,在单结构中,链表分为单向链表、双向链表;单向链表:上一个结点存放了下一个结点的地址;双向链表:前一个结点存了后一个结点的地址,后一个结点也存放了前一个结点的地址;注:如若想在单链表中找倒数第k个结点,是非常麻烦的,因为单向链表只记录了数据与下一结点的地址,也就是说单链表中的结点不能找到自己的上一结点;但是对于双向链表来说,就完全不是事;并且在双向链表中,删除结点无需保存上一个结点的地址(相较于单链表);
2024-10-12 08:56:31
1195
原创 数据结构与算法 - 动态顺序表 --概念+实现
1、线性表:在逻辑结构上呈现线性,其物理结构不一定呈现线性;线性表包括:顺序表、链表、栈、队列、串等;2、顺序表就是数组,但是在数组的基础上,它还要求数据是从头开始连续存储的,并不能跳跃间隔;并且顺序表作为线性表的一种,其逻辑结构与物理结构均呈现线性;3、线性表的实现定义动态顺序表的类型初始化顺序表功能接口函数的实现(增删查改打印)一些细节的接口函数(销毁动态开辟的空间)小技巧,倘若想迅速搓出一个顺序表,可以先写指定pos位置的插入、指定pos位置的删除这两个函数,头插、尾插、头删、
2024-10-12 08:55:30
1095
原创 解题 -- 有关二进制的题型总结
我们可以将奇数位上全是1的数与目标数值进行按位与,得到目标数值中奇数位上数据,再利用右移操作符>> 将奇数位上的数据向右移动一位;同理,可以将偶数位上全是1的数与目标数值进行按位与,得到目标数值中偶数位上的数据,然后再利用左移操作符
2024-09-24 21:48:30
910
原创 数据结构与算法 #时间复杂度 #空间复杂度
算法的时间复杂度是一个函数,它定量地描述了该算法的运行时间(该算法执行所消耗的时间);理论来说,时间复杂度是不可能算出来的,只有当此程序在机器上跑起来的时候,才可以知道此算法运行的时间;注:此处所述的函数,并不是在C语言中的那个函数,而是在数学之中的函数表达式;时间复杂度为什么不是用来计算该代码运行了多少秒呢?因为并没有一个准确的方式去计算一个算法运行了多少秒;相同的算法在不同的机器上,是有差异的,即一个算法的执行速度受环境的影响;那么时间复杂度究竟计算的是什么呢?计算的是一个算法之中基本
2024-09-23 19:00:45
1209
原创 解题-offsetof 宏的模拟实现
看图容易理解,但是若想要通过计算得到偏移量该如何做呢?如果起始位置的地址为0的话,此时取出成员a 的地址便是其偏移量,同理取出成员i 、成员c 的地址对应的也是其偏移量;即当起始地址为0的时候,相应地取出其地址便是得到了其偏移量;那么如何让结构体变量的其实地址为0呢?0这个地址的空间是不可以进行访问的,但是并不代表不可以使用这个地址;只要将地址0进行强制类型转换成该结构体变量类型的地址;
2024-09-17 20:49:39
383
原创 函数栈帧的创建与销毁
在写代码的过程中,你是否会有疑问,当你越界打印数据的时候,屏幕上会出现"烫烫烫烫……" 或者 “屯屯屯屯……” ,这是为什么呢?这是由于在Debug 模式的第四步中,会将所有分配出来的栈空间的每一个字节均初始化为0xCC,而 0xCCCC所对应的汉字编码便是"烫" ; 在堆区中,编译器会将分配出来的堆空间中的每一个字节初始化为 0xCD ,而0xCDCD所对应的汉字编码便是“屯” ;局部变量是怎么创建的?为什么局部变量的值为随机值?函数名可以表示函数的地址,函数如何调用的?其传参的过程又是怎样
2024-09-17 16:11:48
817
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人