自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

2403_87165176的博客

记录大学计算机成长历程

  • 博客(37)
  • 收藏
  • 关注

原创 C语言指针万字超级最强解析与总结!!!!!

我们知道计算机上CPU(中央处理器)在处理数据的时候,需要的数据是在内存中读取的,处理后的数据也会放回内存中,那我们买电脑的时候,电脑上内存是8GB/16GB/32GB等,那这些内存空间如何⾼效的管理呢?32根地址线,就能表⽰2^32种含义,C语⾔中其实也是⼀样的,我们只要拿到了地址(指针),就可以通过地址(指针)找到地址(指针)指向的对象,这⾥必须学习⼀个操作符叫解引⽤操作符(*)这个宏常常被称为“断⾔”NULL 是C语⾔中定义的⼀个标识符常量,值是0,0也是地址,这个地址是⽆法使⽤的,读写该地址。

2024-11-22 00:02:06 3102

原创 一文学会c++栈 队列 堆 容器适配器 反向迭代器 优先级队列stack queue priority_queue

本文介绍了C++中三种重要的容器适配器:栈(stack)、队列(queue)和优先队列(priority_queue)。 栈(stack):先进后出结构,底层默认使用deque实现,提供push()、pop()、top()等操作,并给出栈的压入弹出序列和逆波兰表达式两道例题。 队列(queue):先进先出结构,同样基于deque实现,包含push()、pop()、front()等基本操作。 优先队列(priority_queue):类似堆结构,默认大顶堆基于vector实现,可通过greater<in

2025-07-31 08:45:00 1153

原创 一文学会c++list

本文介绍了C++中list容器的特性与模拟实现。list是一种双向链表结构,支持常数时间任意位置插入但访问元素需要线性时间。文章讲解了list的基本接口、迭代器失效问题及正确使用方法,并详细展示了list的模拟实现过程,包括节点类、迭代器类和list类的设计,重点实现了插入、删除等核心操作。模拟实现部分采用模板编程,支持迭代器操作符重载,能够像标准库list一样使用迭代器访问和修改元素。

2025-07-26 14:11:09 936

原创 一文学会c++vector

vector简介与使用要点 vector是C++中的动态数组,具有自动扩容特性。主要特点包括:动态大小、随机访问、尾部插入高效(O(1)时间)。使用时需注意迭代器失效问题,特别是扩容和删除操作后。常用接口包括:push_back/pop_back、resize/reserve、begin/end等。vector会预分配额外空间(通常1.5-2倍),减少频繁扩容开销。关键注意事项:扩容可能导致原有迭代器失效,erase操作后需要重新获取迭代器。模拟实现展示了vector的核心机制,包括迭代器、容量管理和元素操

2025-07-17 21:55:26 967

原创 一文学会c++ string类

本文介绍了C++标准库中string类的常用接口及其模拟实现。主要内容包括:1)string对象的构造方法;2)容量操作接口如size、capacity、resize等;3)访问及遍历方法如operator[]、迭代器等;4)修改操作如append、push_back等;5)非成员函数如运算符重载。还展示了string类的模拟实现,采用字符指针、长度和容量三个成员变量,实现了构造函数、拷贝控制、容量调整、元素访问、字符串操作等核心功能。代码示例详细演示了如何通过new/delete管理内存,以及通过strc

2025-07-14 00:17:51 1217

原创 一文认识并学会c++模板(初阶)

泛型编程是通过编写与类型无关的通用代码实现代码复用的手段,模板是其基础。函数模板允许定义通用函数,编译器会根据实参类型自动生成具体代码,支持隐式和显式实例化。类模板类似,但实例化时需显式指定类型。泛型编程通过模板机制避免了重复编写不同类型的功能代码,提高了开发效率。

2025-07-13 21:57:57 1149

原创 超级详细讲解转义字符,\? \‘ \f \0 \t等等!!!

d代表一个8进制数(0~7),\130,会将8进制数130转义十进制数88,根据ASCLL表(一个将键盘上的所有字符用数字表示的表),88表示X。用于字符串的停止,\0 是一个转义序列,代表空字符(null character),它的ASCII码是0,\0 和 \000 是等价的,都表示ASCII码为0的字符。每个红框8个字符,\t使光标跳跃,可以使打印的更整齐。\b使得光标回退一格,再输入abc会替代g的位置。,光标有的在下一行的同一列,有的在下一行的开头。想打印\n,\转义后面的,使变为普通的\。

2025-05-30 21:32:13 3123

原创 一文学会c++中的内存管理知识点

C/C++内存管理主要分为栈、堆、数据段和代码段四部分。栈存储非局部变量和函数参数,堆用于动态内存分配,数据段存放全局和静态变量,代码段保存可执行指令和常量。C语言通过malloc/calloc/realloc分配内存,free释放;C++则新增new/delete操作符,简化了动态内存操作。相比malloc/free,new/delete能自动调用构造函数/析构函数,支持初始化,且无需强制类型转换。关键区别在于new/delete是操作符而非函数,具有更完善的异常处理机制,尤其对自定义类型处理更高效。合理

2025-05-30 02:27:30 1524

原创 全面理解类和对象(下)

文章摘要:本文探讨了C++构造函数的初始化列表与赋值区别,指出初始化列表才是真正的初始化操作。介绍了静态成员的特点与使用场景,包括静态变量必须在类外初始化、静态函数无this指针等特性。详细讲解了友元机制(友元函数和友元类)如何突破封装限制,以及内部类的定义和使用特点。最后强调类作为实体描述模板的作用,通过实例化创建具体对象。全文通过代码示例详细说明了各类语法特性的使用方法和注意事项。

2025-05-25 16:19:41 1107

原创 超详细讲解C语言转义字符\a \b \r \t \? \n等等

C语言有一组字符很特殊,叫做,顾名思义,

2025-05-23 14:10:28 623

原创 全面学习c++类与对象(中)(非常重要)(析构构造拷贝函数赋值运算符重载等等)

在C++中,类的默认成员函数包括构造函数、析构函数和拷贝构造函数。即使类为空,编译器也会自动生成这些默认成员函数。构造函数用于初始化对象,其名称与类名相同,无返回值,且可以重载。如果类中没有显式定义构造函数,编译器会生成一个默认的无参构造函数,但不会初始化内置类型。C++11允许在声明时为内置类型提供默认值。析构函数用于清理对象资源,其名称为类名前加~,无返回值且不能重载。对象生命周期结束时,编译器会自动调用析构函数。拷贝构造函数用于创建一个与现有对象完全相同的新对象,其参数必须为类类型的引用,否则会导致无

2025-05-22 21:55:09 1840

原创 全面且深度学习c++类和对象(上)

C语言是面向过程的设计,关注的是步骤和流程,而C++是面向对象的设计,关注的是对象及其交互。例如,洗衣服的过程在C语言中需要详细描述每个步骤,而在C++中则通过人、衣服、洗衣粉和洗衣机四个对象的交互完成,用户无需关注洗衣机的具体工作原理。C++引入了类的概念,类中可以定义变量和函数,而C语言的结构体只能定义变量。C++通过访问限定符(public、protected、private)实现封装,隐藏对象的内部细节,仅对外公开接口。类的实例化是创建类的对象并分配实际内存空间的过程。类的大小计算不包含函数,仅计算

2025-05-16 23:08:47 887

原创 数据结构0基础学习堆

堆是一种重要的数据结构,是一种完全二叉树,(二叉树的内容后面会出),堆分为大小堆,大堆,左右结点都小于根节点,(又称子节点和父节点),小堆则反过来,可以用静态数组/顺序表实现。

2025-05-09 13:42:07 1611 2

原创 【基础必备】C语言转C++入门篇(各种杂碎知识)

本篇文章学习c++知识,主要是补充C语言的不足之处,同时也为后续C++学习铺路。引用是给一个变量取一个别名,两者共用一块内存,两者关系就像西红柿和番茄的关系 ,引用的存在主要来替代指针作用,符号是&,和取地址符相同。int& b = a;return 0;

2025-05-07 22:23:27 1173

原创 一篇文章搞懂数据结构算法的时间复杂度和空间复杂度

在计算机科学中,算法的时间复杂度是一个函数,它定量描述了该算法的运行时间。一个算法执行所耗费的时间,从理论上说,是不能算出来的,只有你把你的程序放在机器上跑起来,才能知道。但是我们需要每个算法都上机测试吗?是可以都上机测试,但是这很麻烦,所以才有了时间复杂度这个分析方式。一个算法所花费的时间与其中语句的执行次数成正比例,

2025-05-06 23:14:11 1156

原创 C语言数据结构之顺序表

的存储单元依次存储数据元素的线性结构,一般情况下采用数组存。静态顺序表缺点:开多了用不了,开少了又不够。生死有命富贵在天,能不能悟就看自己了。在数组上完成数据的增删查改。动态:使用动态开辟的数组存储。静态:使用定长数组存储元素。

2025-05-05 23:57:37 1343

原创 【万字超精品】一篇文章搞清楚全部排序(冒泡排序插入排序希尔排序选择排序堆排序快速排序(递归非递归)归并排序(递归非递归)计数排序)

排序是计算机领域最基础且重要的算法,将一组数据按降序或升序重新排列,如网购网站价格排序等等。广泛用于==数据库查询,数据分析,搜索算法,==等等。

2025-05-03 22:32:05 1911

原创 一篇文章搞懂数据结构算法的时间复杂度和空间复杂度

在计算机科学中,算法的时间复杂度是一个函数,它定量描述了该算法的运行时间。一个算法执行所耗费的时间,从理论上说,是不能算出来的,只有你把你的程序放在机器上跑起来,才能知道。但是我们需要每个算法都上机测试吗?是可以都上机测试,但是这很麻烦,所以才有了时间复杂度这个分析方式。一个算法所花费的时间与其中语句的执行次数成正比例,

2025-04-26 22:10:32 1824

原创 C语言学习之二叉树(有例题)

二叉树是一种重要的数据结构,每个节点最多有两个字节点,分为左右节点,

2025-04-24 22:14:38 1250

原创 冲刺蓝桥杯之速通vector!!!!!

为了应对这种情况,nums1的初始长度为m+n,其中前m个元素表示应合并的元素,后n个元素为0,应忽略。给你两个按非递减顺序排列的整数数组nums1和nums2,另有两个整数m和n,分别表示nums1和nums2中的元素数目。输入:nums1=[1,2,3,0,0,0],m=3,nums2=[2,5,6],n=3。合并结果是[1,2,2,3,5,6],其中斜体加粗标注的为nums1中的元素。:有柜子,柜子还带有格子,说明是二维的。

2025-01-30 23:48:09 3217

原创 一篇文章搞清楚动态内存管理所有知识,包括柔性数组

当是情况2的时候,原有空间之后没有⾜够多的空间时,扩展的⽅法是:在堆空间上另找⼀个合适⼤⼩的连续空间来使⽤。这样函数返回的是⼀个新的内存地址。因为free(str);所以如果我们对申请的内存空间的内容要求初始化,那么可以很⽅便的使⽤calloc函数来完成任务。当是情况1的时候,要扩展内存就直接原有内存之后直接追加空间,原来空间的数据不发⽣变化。//传过去是要释放的空间的起始地址。//在栈空间上开辟10个字节的连续空间。,那数组的编译时开辟空间的⽅式就不能满⾜了。但是对于空间的需求,不仅仅是上述的情况。

2025-01-28 15:41:22 1894

原创 一篇文章彻底捋顺C语言文件操作知识点

磁盘/硬盘上的文件叫文件,按功能分两种,程序文件和数据文件int main()return 1;fclose(pf);pf=NULL;return 0;int ch;ch

2024-12-09 22:40:53 2627

原创 深入学习指针(5)!!!!!!!!!!!!!!!

时,被调⽤的函数就是回调函数。回调函数不是由该函数的实现⽅直接调⽤,⽽是在特定的事件或条。如果你把函数的指针(地址)作为参数传递给另⼀个函数,当这个指针被⽤来调⽤其所指向的函数。strcpm比较俩字符串大小,对应位置字符的ASCLL值。件发⽣时由另外的⼀⽅调⽤的,⽤于对该事件或条件进⾏响应。

2024-12-01 21:44:57 1553

原创 史上最全指针解析!!!!!!深入学习指针!!!!(4)

数组指针变量是⽤来存放数组地址的,那怎么获得数组的地址呢?就是我们之前学习的==&数组名==如果我们要将函数的地址存放起来,就得创建函数指针变量咯,函数指针变量的写法其实和数组指针。过去我们有⼀个⼆维数组的需要传参给⼀个函数的时候,⽐如有⼀个整型的⼆维数组,写⼀个函数。函数指针变量应该是⽤来存放函数地址的,未来通过地址能够调⽤函数的。test,打印数组的全部内容。

2024-12-01 21:44:53 1069

原创 深入学习指针!!!史上最全指针解析!!!!!(2)

传址调⽤,可以让函数和主调函数之间建⽴真正的联系,在函数内部可以修改主调函数中的变量;我们现在要解决的就是当调⽤Swap函数的时候,Swap函数内部操作的就是main函数中的a和b,直接。变量是可以修改的,如果把变量的地址交给⼀个指针变量,通过指针变量的地址的改变也可以修改这个变量。不能被修改,如果p拿到n的地址就能修改n,这样就打破了const的限制,这是不合理的,所以应该让。NULL 是C语⾔中定义的⼀个标识符常量,值是0,0也是地址,这个地址是⽆法使⽤的,读写该地址。这就是const的作⽤。

2024-11-28 20:14:59 1688

原创 深入学习指针!!史上最全最详细讲解指针!!!!(3)

同理arr[i] 应该等价于*(arr+i),数组元素的访问在编译器处理的时候,也是转换成⾸元素的地址+偏移。我们前⾯是在函数外部计算数组的元素个数,那我们可以把函数传给⼀个函数后,函数内部求数组的元素个数吗。输出的结果是:40,如果arr是数组⾸元素的地址,那输出应该的应该是4/8才对。有了前⾯知识的⽀持,再结合数组的特点,我们就可以很⽅便的使⽤指针访问数组了。我们类⽐⼀下,整型数组,是存放整型的数组,字符数组是存放字符的数组。那么在数组传参的时候,传递的是数组名,也就是说本质上数组传参本质上。

2024-11-28 20:14:55 1571

原创 一篇文章搞清楚C语言结构体所有知识点!!!

/声明结构体时,同时定义和初始化变量p1;//指定顺序初始化struct pint x;int y;int z;//结构体嵌套初始化struct p1int _a : 2;//两个比特位int _b : 7;int _b;int _c;int _d;8 16。

2024-11-17 22:16:08 1586

原创 呕心沥血!!!只为讲清楚整数和浮点数在内存中的存储

1反码:111111111 111111111 111111111 1111111110。-1补码:111111111 111111111 111111111 1111111111。因为char类型大小一个字节,小于-128不影响最后8位大小,故结果与上题相同。-1补码全是1,%u补码即为原码,所以死循环而且数非常大。E是一个无符号整数,但科学计数法E可能为负数,所以存储时。c为无符号字符类型,补0,补码即为原码,所以是。思路:取整数1的一个字节,判断该字节大小。答案:-1 -1 255。

2024-11-16 01:46:57 850

原创 字符函数和字符串函数

⽤来⽐较str1 和str2指向的字符串,从两个字符串的第⼀个字符开始⽐较,如果两个字符的ASCII码值相等,就⽐较下⼀个字符。strerror 函数可以通过参数部分的 errnum 表⽰错误码,得到对应的错误信息,并且返回这个错误信息字符串⾸字符的地址。strncpy函数指定了拷⻉的⻓度,源字符串不⼀定要有\0 ,同时在设计参数的时候,就会多⼀层思。strstr 函数,查找str2 指向的字符串在str1 指向的字符串中第⼀次出现的位置。num从source指向的字符串中最多拷⻉的字符个数。

2024-11-15 23:33:33 1154

原创 C语言内存函数

如果要⽐较2块内存单元的数据的⼤⼩,可以用memcmp 函数,这个函数的特点就是可以指定⽐较⻓度。结果: 1 2 1 2 3 4 5 8 9 10。结果:xxxxxxworld。

2024-11-14 23:52:27 1032

原创 C语言最简单的扫雷实现(解析加原码)

头文件992210。

2024-11-10 15:36:26 1444

原创 深入学习指针!指针史上最全解析!!(1)

我们知道计算机上CPU(中央处理器)在处理数据的时候,需要的数据是在内存中读取的,处理后的数据也会放回内存中,那我们买电脑的时候,电脑上内存是8GB/16GB/32GB等,那这些内存空间如何⾼效的管理呢?C语⾔中其实也是⼀样的,我们只要拿到了地址(指针),就可以通过地址(指针)找到地址(指针)指向的对象,这⾥必须学习⼀个操作符叫解引⽤操作符(*),⽤来接收同类型数据的地址,这样的设计可以实现泛型编程的效果,使得⼀个函数来处理多种类型的数据。计算机中的编址,并不是把每个字节的地址记录下来,⽽是通过。

2024-11-02 10:28:47 1371 3

原创 操作符史上最全解析没有之一!!!!!!! (上)

传过去是首元素地址,用指针接收,所以不管char int 类型,都是指针,都是4/8字节。,其中的运算在编译就完成了,而赋值在运行阶段运行,运行时关于编译的代码已经没有了。比较两个字符串相等用strcmp( , )=0,并引头文件&& i=a++,a=0,那么后续不用在计算了,1234。sizeof意义:操作数的类型长度,字节为单位。1>算术右移:右边丢弃,左边补原来符号位。2>逻辑右移:右边丢弃,左边补0。左移操作符:左边丢弃,右边补0。查找一个数的二进制位中1的数量。

2024-11-01 17:09:14 1445

原创 原码反码补码&按位与 |按位或 ^按位异或问题

则a按位与b : 00000000000000000000000000000001。a的二进制位:00000000000000000000000000000011。b的二进制位:00000000000000000000000000000101。:原码的符号位不变,其他位按位取反就是反码。:直接根据数值写出的二进制序列就是原码。这样我们可以知其一来推断其他两码。:反码+1,就是补码。以补码形式存放在内存。不能引入变量,用异或。又根据相异为1,所以。将某数的某位0改为1。

2024-10-24 19:59:58 472

原创 C语言三子棋解析(完整代码)

5.判断谁赢,横3竖3,对角3。==若有一成立,打印结果,并返回1,==使主函数跳出while循环,开始下一次游戏。6.函数play1()代表玩家,后面跟着print()打印下完第一步的棋盘。3.函数game1()代表初始化二维数组,这个数组方便表示你输入的坐标。3.玩家下棋,判断所下位置正确与否,注意输入的数要在数组要转化。2.进入游戏分析游戏组成,分别用不同函数代表不同功能。7.函数play2()代表电脑,后面同理。1.声明头文件,主函数只需引用头文件就行。4.电脑下棋,时间函数生成两个随机数,

2024-10-21 21:17:22 519

原创 C语言用while循环与辗转相除法求最大公因数和最小公倍数

最大公因数:找9,21%9 ≠ 0,不行。从9开始往下减,9已经是最大的了,向下减,减到第一个满足21和9除它都=0的数,则为最大公因数,87654都不行,3满足即为3。3,下一步,用除数除余数,即9%3=3,无余数,说明3是最大公因数。最小公倍数:21*9%3=63。如果6%2=3无余数,那么3即使最大公因数,最小公倍数公式:二者相乘除最大公因数,即为6*2%3=6。最小公倍数:找21,21不是9的倍数,向上加,同理,第一个除二者都=0的即为最小公倍数。求最大公因数直接找较小值,是2,很明显是。

2024-10-08 23:29:27 591

原创 C语言成长之路——初识C语言!!!

人有人语,机有机语,人的脑子好用,可以理解万物。计算机也有个大脑叫CPU,但CPU就没那么灵活,CPU工作时只有高电位(通常是5伏特)和低电位(通常0伏特)两种状态,也称通电和断电两种状态,人们也把通电状态叫做1,断电状态叫做0,所以有了计算机二进制只能识别0和1的说法。人想要和计算机交流需要计算机语言,计算机发展初期,当时编程只有超级大佬才会,他们想写程序只能写(00001 1010 110011000)一串二进制的数字,(我随便敲的数字),这种记忆量非常庞大,计算机语言等待改革。

2024-10-02 22:20:59 1016 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除