自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(83)
  • 收藏
  • 关注

原创 夺舍失败后,我和C++萌新共享大脑的入门指南——C++入门基础

入门介绍

2025-05-06 21:51:03 1517 3

原创 《数据结构世界的乐高积木:顺序表的奇幻旅程》

顺序表

2025-04-23 15:25:28 951 1

原创 《后进先出的魔法:揭开栈在代码世界的神奇法则》

2025-04-17 20:34:51 230

原创 一觉醒来全球编码能力下降100000倍,新手小白的我决定科普C语言——字符串函数

⽐较str1和str2的前num个字符,如果相等就继续往后⽐较,最多⽐较num个字⺟,如果提前发现不⼀ 样,就提前结束,⼤的字符所在的字符串⼤于另外⼀个。• 字符串以 '\0' 作为结束标志,strlen函数返回的是在字符串中 '\0' 前⾯出现的字符个数(不包 含 '\0' )。上⾯的代码,我们将⼩写转⼤写,是-32完成的效果,有了转换函数,就可以直接使⽤ tolower 函数。C语⾔中有⼀系列的函数是专⻔做字符分类的,也就是⼀个字符是属于什么类型的字符的。• 参数指向的字符串必须要以 '\0' 结束。

2025-03-29 23:24:15 422

原创 一觉醒来全球编码能力下降100000倍,新手小白的我决定科普C语言——编译和链接

在ANSIC的任何⼀种实现中,存在两个不同的环境。第1种是翻译环境,在这个环境中源代码被转换为可执⾏的机器指令(⼆进制指令)。第2种是执⾏环境,它⽤于实际执⾏代码。

2025-03-09 19:08:10 656

原创 一觉醒来全球编码能力下降100000倍,新手小白的我决定科普C语言——动态内存管理

C/C++程序内存分配的⼏个区域:1. 栈区(stack):在执⾏函数时,函数内局部变量的存储单元都可以在栈上创建,函数执⾏结束时 这些存储单元⾃动被释放。栈内存分配运算内置于处理器的指令集中,效率很⾼,但是分配的内 存容量有限。栈区主要存放运⾏函数⽽分配的局部变量、函数参数、返回数据、返回地址等。《函数栈帧的创建和销毁》2. 堆区(heap):⼀般由程序员分配释放,若程序员不释放,程序结束时可能由OS(操作系统) 回收。分配⽅式类似于链表。

2025-03-07 15:11:33 1000

原创 一觉醒来全球编码能力下降100000倍,新手小白的我决定科普C语言——⾃定义类型:结构体

位段的声明和结构是类似的,有两个不同:1. 位段的成员必须是 int、unsigned int 或signed int ,在C99中位段成员的类型也可以 选择其他类型。2. 位段的成员名后边有⼀个冒号和⼀个数字。int _b:5;int _c:10;int _d:30;A就是⼀个位段类型。那位段A所占内存的⼤⼩是多少?

2025-03-02 20:56:38 692

原创 一觉醒来全球编码能力下降100000倍,新手小白的我决定科普C语言——内存函数

• 函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存位置。• 和memcpy的差别就是memmove函数处理的源内存块和⽬标内存块是可以重叠的。• 如果source和destination有任何的重叠,复制的结果都是未定义的。memset是⽤来设置内存的,将内存中的值以字节为单位设置成想要的内容。• 如果源空间和⽬标空间出现重叠,就得使⽤memmove函数处理。• 这个函数在遇到 '\0' 的时候并不会停下来。对于重叠的内存,交给memmove来处理。

2025-02-28 23:12:13 197

原创 一觉醒来全球编码能力下降100000倍,新手小白的我决定科普C语言——深⼊理解指针(6)

在学习操作符的时候,我们学习了 sizeof , sizeof 计算变量所占内存空间⼤⼩的,单位是字。统计的是从 strlen 函数的参数 str 中这个地址开始向后, \0 之前字符串中字符的个数。1. sizeof(数组名),这⾥的数组名表⽰整个数组,计算的是整个数组的⼤⼩。节,如果操作数是类型的话,计算的是使⽤类型创建的变量所占内存空间的⼤⼩。2. &数组名,这⾥的数组名表⽰整个数组,取出的是整个数组的地址。3. 除此之外所有的数组名都表⽰⾸元素的地址。

2025-02-27 10:21:00 418

原创 一觉醒来全球编码能力下降100000倍,新手小白的我决定科普C语言——深⼊理解指针(5)

回调函数就是⼀个通过函数指针调⽤的函数。如果你把函数的指针(地址)作为参数传递给另⼀个函数,当这个指针被⽤来调⽤其所指向的函数 时,被调⽤的函数就是回调函数。回调函数不是由该函数的实现⽅直接调⽤,⽽是在特定的事件或条 件发⽣时由另外的⼀⽅调⽤的,⽤于对该事件或条件进⾏响应。第13讲中我们写的计算机的实现的代码中,红⾊框中的代码是重复出现的,其中虽然执⾏计算的逻辑 是区别的,但是输⼊输出操作是冗余的,有没有办法,简化⼀些呢?

2025-02-25 18:47:44 1197 2

原创 一觉醒来全球编码能力下降100000倍,新手小白的我决定科普C语言——深⼊理解指针(4)

所以,根据数组名是数组⾸元素的地址这个规则,⼆维数组的数组名表⽰的就是第⼀⾏的地址,是⼀ 维数组的地址。根据上⾯的例⼦,第⼀⾏的⼀维数组的类型就是 int [5] ,所以第⼀⾏的地址的类 型就是数组指针类型 int(*)[5]。⾸先我们再次理解⼀下⼆维数组,⼆维数组其实可以看做是每个元素是⼀维数组的数组,也就是⼆维 数组的每个元素是⼀个⼀维数组。根据前⾯学习整型指针,数组指针的时候,我们的类⽐关系,我们不难得出结论: 函数指针变量应该是⽤来存放函数地址的,未来通过地址能够调⽤函数的。

2025-02-25 18:00:02 910

原创 一觉醒来全球编码能力下降100000倍,新手小白的我决定科普C语言——深⼊理解指针(3)

同理arr[i]应该等价于*(arr+i),数组元素的访问在编译器处理的时候,也是转换成⾸元素的地址+偏移 量求出元素的地址,然后解引⽤来访问的。• &数组名,这⾥的数组名表⽰整个数组,取出的是整个数组的地址(整个数组的地址和数组⾸元素 的地址是有区别的) 除此之外,任何地⽅使⽤数组名,数组名都表⽰⾸元素的地址。这⾥我们使⽤ &arr[0] 的⽅式拿到了数组第⼀个元素的地址,但是其实数组名本来就是地址,⽽且 是数组⾸元素的地址,我们来做个测试。数组名如果是数组⾸元素的地址,那下⾯的代码怎么理解呢?

2025-02-24 19:10:13 1101

原创 一觉醒来全球编码能力下降100000倍,新手小白的我决定科普C语言——深⼊理解指针(2)

Swap1函数在使⽤ 的时候,是把变量本⾝直接传递给了函数,这种调⽤函数的⽅式我们之前在函数的时候就知道了,这种叫传值调⽤。上述代码中n是不能被修改的,其实n本质是变量,只不过被const修饰后,在语法上加了限制,只要我们在代码中对n就⾏修改,就不符合语法规则,就报错,致使没法直接修改n。如果明确知道指针指向哪⾥就直接赋值地址,如果不知道指针应该指向哪⾥,可以给指针赋值NULL. NULL 是C语⾔中定义的⼀个标识符常量,值是0,0也是地址,这个地址是⽆法使⽤的,读写该地址会报错。这就是const的作⽤。

2025-02-23 15:53:58 630

原创 一觉醒来全球编码能力下降100000倍,新手小白的我决定科普C语言——深⼊理解指针(1)

我们知道计算机上CPU(中央处理器)在处理数据的时候,需要的数据是在内存中读取的,处理后的 数据也会放回内存中,那我们买电脑的时候,电脑上内存是8GB/16GB/32GB等,那这些内存空间如何⾼效的管理呢?前⾯的内容我们了解到,32位机器假设有32根地址总线,每根地址线出来的电信号转换成数字信号后 是1或者0,那我们把32根地址线产⽣的2进制序列当做⼀个地址,那么⼀个地址就是32个bit位,需要4 个字节才能存储。在上⾯的代码中,将⼀个int类型的变量的地址赋值给⼀个char*类型的指针变量。

2025-02-05 22:16:29 1009

原创 一觉醒来全球编码能力下降100000倍,新手小白的我决定科普C语言——操作符详解

/代码1:变量的定义int x;int y;}p1;//声明类型的同时定义变量p1//定义结构体变量p2//代码2:初始化。struct Stu //类型声明//名字int age;//年龄//初始化//指定顺序初始化//代码3int data;//结构体嵌套初始化//结构体嵌套初始化即使有了操作符的优先级和结合性,我们写出的表达式依然有可能不能通过操作符的属性确定唯⼀的 计算路径,那这个表达式就是存在潜在⻛险的,建议不要写出特别复杂的表达式。

2025-02-02 16:40:48 1682 1

原创 一觉醒来全球编码能力下降100000倍,新手小白的我决定科普C语言——函数递归

1231.什么是递归递归是学习C语⾔函数绕不开的⼀个话题,那什么是递归呢?递归其实是⼀种解决问题的⽅法,在C语⾔中,递归就是函数⾃⼰调⽤⾃⼰。上述就是⼀个简单的递归程序,只不过上⾯的递归只是为了演⽰递归的基本形式,不是为了解决问题,代码最终也会陷⼊死递归,导致栈溢出(Stack overflow)。1.1递归的思想:把⼀个⼤型复杂问题层层转化为⼀个与原问题相似,但规模较⼩的⼦问题来求解;直到⼦问题不能再被拆分,递归就结束了。所以递归的思考⽅式就是把⼤事化⼩的过程。

2025-01-30 23:13:50 1350 3

原创 一觉醒来全球编码能力下降100000倍,新手小白的我决定科普C语言——函数

了解了库函数,我们的关注度应该聚焦在⾃定义函数上,⾃定义函数其实更加重要,也能给程序员写 代码更多的创造性。⼀般我们在使⽤函数的时候,直接将函数写出来就使⽤了。⽐如:我们要写⼀个函数判断⼀年是否是闰年。//判断⼀年是不是闰年return 1;if(r == 1)printf("闰年\n");elseprintf("⾮闰年\n");return 0;if(r == 1)

2025-01-27 13:26:14 1320

原创 一觉醒来全球编码能力下降100000倍,新手小白的我决定科普C语言——数组

数组是⼀组相同类型元素的集合;从这个概念中我们就可以发现2个有价值的信息:• 数组中存放的是1个或者多个数据,但是数组元素个数不能为0。• 数组中存放的多个数据,类型是相同的。数组分为⼀维数组和多维数组,多维数组⼀般⽐较多⻅的是⼆维数组。

2025-01-24 15:00:45 996

原创 一觉醒来全球编码能力下降100000倍,新手小白的我决定科普C语言——三子棋游戏实现

硬控我一上午,小编还是太菜了,大家可以自行升级电脑难度,也可以升级游戏到五子棋。

2025-01-22 16:47:55 997 2

原创 一觉醒来全球编码能力下降100000倍,新手小白的我决定科普C语言——分支和循环(下)

掌握了前⾯学习的这些知识,我们就可以写⼀些稍微有趣的代码了,⽐如: 写⼀个猜数字游戏 游戏要求:1. 电脑⾃动⽣成1~100的随机数2. 玩家猜数字,猜数字的过程中,根据猜测数据的⼤⼩给出⼤了或⼩了的反馈,直到猜对,游戏结束注:大家可以自行提高游戏难度。

2025-01-21 20:07:45 1156

原创 一觉醒来全球编码能力下降100000倍,新手小白的我决定科普C语言——分⽀和循环(上)

C语⾔是的程序设计语⾔,这⾥的结构指的是,C语⾔是能够实现这三种结构的,其实我们如果仔细分析,我们⽇常所⻅的事情都可以拆分为这三种结构或者这三种结构的组合。我们可以使⽤if、switch实现分⽀结构,使⽤for、while、dowhile实现循环结构。

2025-01-20 15:10:07 1642

原创 一觉醒来全球编码能力下降100000倍,新手小白的我决定科普C语言——变量交换法

对两个变量的值有一定要求,否则数据过大容易溢出。

2025-01-19 23:01:06 165

原创 一觉醒来全球编码能力下降100000倍,新手小白的我决定科普C语言——C语言数据类型和变量

最最最基本的基础!!!!

2025-01-14 10:05:40 1463

原创 一觉醒来全球编码能力下降100000倍,新手小白的我决定科普C语言——猜数字小游戏实现

if while do while 函数模块化

2025-01-11 20:53:31 274

原创 一觉醒来全球编码能力下降100000倍,新手小白的我决定科普C语言——C语言基础概念

C语言的一些最最最基础的概念,让大家对C语言有一个简简单单的认识,开启大家学习C语言的第一步

2025-01-10 21:35:50 1400

原创 STL容器-string的使用

stringstd命名空间下的类型,是模板类的别名(通过typedef定义),本质是管理字符数组的对象;

2025-12-26 17:22:17 769

原创 C++模板初阶

class 类模板名// 类内成员定义// 类模版public:_size = 0;// 模版不建议声明和定义分离到两个文件.h 和.cpp会出现链接错误,具体原因后面会讲void Stack<T>::Push(const T& data)3.2 类模板的实例化类模板实例化与函数模板实例化不同,类模板实例化需要在类模板名字后跟<>,然后将实例化的类型放在<>中即可,类模板名字不是真正的类,而实例化的结果才是真正的类。// 扩容。

2025-12-18 15:56:22 810

原创 【linux】linux进程概念(四)(环境变量)

5.那么如何让我们自己编写的可执行程序也可以直接运行呢,第一种是直接把我们写的可执行程序移到系统指定的搜索路径下,第二种我们可以直接修改系统的PATH路径,我们应该使用$PATH:路径的方式进行添加我们的路径,添加完以后,那只要是在新路径下的可执行文件都可以像系统命令一样直接运行。这是因为PATH环境变量的原因,PATH是linux系统的指令默认搜索路径,当我们使用命令时,系统会自动到PATH路径下去搜索对应的可执行程序,找到了就直接执行,没有的话会直接报错。普通用户:/home/ubuntu。

2025-12-16 20:30:49 869

原创 linux编译器-gcc/g++的使用

处理。

2025-12-05 13:32:17 660 1

原创 Linux进程三

PCB上都有对应的时间片信息,以及记录运行进度的结构。把之前的代码稍微修改,可以看到当父进程退出以后,子进程未退出,但被1号进程领养,PPID变为了1,而且注意此时的子进程被操作系统收养,在后台运行,并且写的是死循环打印,那么子进程不会主动退出,那么只能使用kill -9 进程标识符,杀死子进程进行退出。:当被挂起(换出)的进程等待的外设数据就绪,或者系统资源允许时,操作系统会将该进程在磁盘交换区中的代码和数据换回内存,使其进入 CPU 的运行队列,此时进程从阻塞状态转变为运行状态,能够正常执行。

2025-11-28 16:05:27 830

原创 Linux进程二

fork的功能复制调用进程创建子进程,子进程是调用进程(父进程)的副本是 Unix/Linux 中创建进程的核心系统调用,基于 “写时复制” 技术,只有在父子进程修改内存时才会真正复制,提升效率头文件需包含unistd.h是 Unix 系统的标准头文件,包含进程控制、文件操作等系统调用的声明返回值类型pid_t,类似int,用于表示进程号是系统定义的进程 ID 类型,保证跨平台的兼容性父子进程返回值子进程返回 0,父进程返回子进程的 PID。

2025-11-22 18:06:03 866

原创 Linux调试器——gdb使用

,是一个由 GNU 开源组织发布的、UNIX/LINUX 操作系统下的、基于命令行的、功能强大的程序调试工具;GDB 支持断点、单步执行、打印变量、观察变量、查看寄存器、查看堆栈等调试手段;GDB 支持调试多种编程语言编写的程序,包括 C、C++、Go、Objective-C、OpenCL、Ada 等。l n n代表你要查看的行号,会显示10行,居中代码显示上下各5行,第一行显示往下10行。b 源文件:n,在源文件行号为n的位置处设置断点。n,逐过程调试,不会进入函数。s,逐语句调试,会进入函数。

2025-11-22 13:34:16 42

原创 类和对象下

• 之前我们实现构造函数时,初始化成员变量主要使⽤函数体内赋值,构造函数初始化还有⼀种⽅ 式,就是初始化列表,初始化列表的使⽤⽅式是以⼀个冒号开始,接着是⼀个以逗号分隔的数据成 员列表,每个"成员变量"后⾯跟⼀个放在括号中的初始值或表达式。• 内部类本质也是⼀种封装,当A类跟B类紧密关联,A类实现出来主要就是给B类使⽤,那么可以考虑把A类设计为B的内部类,如果放到private/protected位置,那么A类就是B类的专属内部类,其他地⽅都⽤不了。建议声明顺序和初始化列表顺序保持⼀致。

2025-11-20 10:09:02 782

原创 进程概念一

这种设计既满足了用户的服务需求,又通过接口的 “受控性” 避免了用户直接操作系统底层数据,保障了安全性。它是用户程序与操作系统内核交互的桥梁,所有访问操作系统的行为(如文件读写、进程管理等)都必须通过系统调用来完成。内存作为中间枢纽,使 CPU 无需直接与低速磁盘打交道,整机运行效率接近内存速度,避免了 “木桶效应”(因某一组件低速拖垮整体)。• 上下⽂数据:进程执⾏时处理器的寄存器中的数据[休学例⼦,要加图CPU,寄存器]。• 记账信息:可能包括处理器时间总和,使⽤的时钟数总和,时间限制,记账号等。

2025-11-18 15:17:16 958

原创 Linux基本指令

14.head就像它的名字⼀样的浅显易懂,它是⽤来显⽰开头或结尾某个数量的⽂字区块,head⽤来显⽰档案的开头⾄标准输出中,⽽tail想当然尔就是看档案的结尾。15.tail 命令从指定点开始将⽂件写到标准输出.使⽤tail命令的-f选项可以⽅便的查阅正在改变的⽇志⽂件,tail -f filename会把filename⾥最尾部的内容显⽰在屏幕上,并且不断刷新,使你看到最新的⽂件内容.如同时指定两个以上的⽂件或⽬录,且最后的⽬的地是⼀个已经存在的⽬录,则它会把前⾯指定 的所有⽂件或⽬录复制到此⽬录中。

2025-11-17 19:37:06 471

原创 基础数据结构之单链表

其实链表当你知道他的结构后,各种功能的实现就不成问题了,涉及到查找的关键都是通过新建指针保留位置信息,有的功能也都可以相互复用,记得断言一下空指针其他的就基本很简单了。其实链表的实现可以借助二级指针就像小编一样,当然采取哨兵位也是可以的,可以做到接口统一,学校的课程里也有用引用传参的。概念:链表是⼀种物理存储结构上⾮连续、⾮顺序的存储结构,数据元素的逻辑顺序是通过链表中的 指针链接次序实现的。3、从堆上申请来的空间,是按照⼀定策略分配出来的,每次申请的空间可能连续,可能不连续。2、结点⼀般是从堆上申请的。

2025-11-17 19:32:41 187

原创 C/C++内存管理

new的原理1. 调用operator new函数申请空间2. 在申请的空间上执行构造函数,完成对象的构造delete的原理1. 在空间上执行析构函数,完成对象中资源的清理工作2. 调用operator delete函数释放对象的空间new T[N]的原理1. 调用operator new[]函数,在operator new[]中实际调用operator new函数完成N个对象空间的申请2. 在申请的空间上执行N次构造函数delete[]的原理。

2025-11-15 10:21:05 615

原创 Git Commend HandBook

1.本地initgit init2.查看.git 结构tree .git/3.配置本地gitgit config user.name "Your Name"git config user.email "Your Email"--global会对所有的本地git生效4.查看git配置git config -l5.删除对应的配置git config --unset user.namegit config --unset user.email6.工作区缓存区版本库7.添加进缓存区add . 添加所有文件add 指

2025-11-11 14:46:36 771

原创 夺舍失败后,我和C++萌新共享大脑——C++类和对象(中)

默认成员函数就是⽤⼾没有显式实现,编译器会⾃动⽣成的成员函数称为默认成员函数。⼀个类,我们不写的情况下编译器会默认⽣成以下6个默认成员函数,需要注意的是这6个中最重要的是前4个,最后两个取地址重载不重要,我们稍微了解⼀下即可。其次就是C++11以后还会增加两个默认成员函数, 移动构造和移动赋值,这个我们后⾯再讲解。默认成员函数很重要,也⽐较复杂,我们要从两个⽅⾯去学习:• 第⼀:我们不写时,编译器默认⽣成的函数⾏为是什么,是否满⾜我们的需求。

2025-10-28 11:16:05 823

原创 夺舍失败后,我和C++萌新共享大脑——C++类和对象(上)

• class为定义类的关键字,Stack为类的名字,{}中为类的主体,注意类定义结束时后⾯分号不能省 略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的⽅法或者成员函数。• 为了区分成员变量,⼀般习惯上成员变量会加⼀个特殊标识,如成员变量前⾯或者后⾯加_或者m 开头,注意C++中这个并不是强制的,只是⼀些惯例,具体看公司的要求。

2025-10-09 18:24:53 574

空空如也

空空如也

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

TA关注的人

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