- 博客(27)
- 收藏
- 关注
原创 C++中string类的学习
可以用于字符串的遍历,我们用char*来实现迭代器,那么对于begin函数的返回值就是一个指向字符串开头的指针,所以返回_str即可,因为成员变量中我们也是使用的char*实现字符串,所以end返回_str+_size,注意end返回的位置是\0的位置在函数后面加上const只是表明不可以通过迭代器更改字符串,写法是一致的。
2026-04-01 10:46:03
502
原创 C++类和对象的学习-2
因为引用时只能引用一个对象且不可更改,所以必须在初始化时给定引用对象,而const定义的变量只能在初始化时确定值,后续不可更改,所以这两种变量必须通过初始化列表进行定义3。
2026-03-25 13:51:38
563
原创 C++类和对象的学习-1
类中的变量称为类的属性或者成员变量,类中的函数称为类的方法或者成员函数使用class关键字命名类,类中的成员变量默认是私有的,类中的成员函数默认是inline函数,如下图,简单定义了一个stack类,成员变量有一个数组,表示栈顶的top,表示栈大小的size注意类中还具有访问限定符,通过访问权限选择性将接口给外部使用,如果没有被限定访问限定符,那么默认为private,在struct结构体中则默认为public。
2026-03-23 23:44:19
605
原创 C++入门学习
直接将定义写在需要使用他的文件下,因为inline函数使用时,是一种替换,不会产生链接的操作,使用call去开辟函数栈帧,所以如果分离声明与定义,会由于找不到链接地址而报错,
2026-03-22 15:44:56
696
原创 常见的几种排序代码实现
对于一个序列,传入左右边界的下标,以第一个元素作为基准值,然后对剩下的元素,从两边向中间遍历,左边设置一个left,右边设置一个right,根据快排的思想,最后基准值左边小右边大,所以对于left来说,只要碰到大于基准值的元素,停止移动,对于right来说,碰到小于基准值的元素也停止移动,然后判断此时left是否还是小于等于right,满足的话将两个位置的值进行交换。简单来说,就是多次进行两个有序数组的合并,归并排序将数组一直二分,直到只剩下一个元素,
2026-03-09 11:09:33
652
原创 二叉树涉及的主要函数
二叉树是数据结构中一种典型的结构,是一种特殊的树,一般对于含有二叉树的结构我们会采用递归的方式从根节点开始递归,直到递归到条件不满足,开始自下而上返回结果例如用下图计算二叉树节点的个数,蓝色箭头代表函数栈帧的建立,每次递归到下一个节点都会创建函数栈帧,直到递归到叶子节点之后,开始向上返回,红色箭头代表销毁函数栈帧这就是一个简单的递归思想,下文会详细讲解递归函数,这里先简单理解。
2026-03-06 11:46:18
721
原创 队列和栈的模拟实现
/初始化队列,将队列的两个指针先置为NULLassert(ps);assert(ps);//判断队列是否为空//如果尾指针为空说明没有节点//返回true代表为空,返回false代表非空//创建一个新节点,动态分配空间//分配失败则报错//data赋值为x//将新节点的指向置为NULLassert(ps);//执行入队操作//如果队列为空//将头尾指针均指向新节点return;//如果队列中已经存在节点//则更新尾指针以及尾节点的指向。
2026-03-02 22:23:39
476
原创 单链表与双向链表模拟实现
在模拟链表时,可以仿照之前的顺序表模拟实现创建三个文件,一个头文件,用于包含函数声明以及结构体定义,和包含所需库中的头文件一个函数定义文件,用于实现函数的定义还有一个测试文件test.c用于测试函数的效果。
2026-03-01 17:28:09
1036
原创 顺序表的模拟实现
顺序表分为静态顺序表和动态顺序表顺序表的底层使用数组进行实现的,静态顺序表的大小固定,创建好之后就不能在改变大小容易造成空间的浪费动态顺序表可以根据需要进行内存的扩容这里主要讲解动态顺序表的实现我们可以分为三个文件进行实现一个头文件包含所需要的头文件以及函数声明一个函数文件用于编写函数的定义一个测试文件用来调试编写好的顺序表,这样结构上更加清晰两个.c文件只需包含头文件“SeqList.h”即可。
2026-02-25 21:19:00
533
原创 文件的编译与链接
在文件的处理过程中,存在两个环境,一个是翻译环境,源代码在这个环境中被转换为可执行的机器指令,一个是运行环境,用于实际执行代码如下图所示,是一个文件处理的基本过程对于翻译环境,由编译和链接两个大过程组成,但是编译的过程还可以细分为预处理,编译,汇编三个过程,具体过程如下图所示,源文件和头文件可以是多个的,在windows环境下生成的目标文件后缀是.obj,在linux环境下后缀是.o链接库是指运行时支持程序运行的基本函数集合,可以是系统提供的也可以是第三方库。
2026-02-13 19:04:50
474
原创 文件的操作函数学习
fopen:打开成功返回一个文件指针,失败返回NULLfclose:关闭成功返回0,关闭失败返回EOF如果读到末尾则设置文件末尾指示器,读写错误设置错误指示器fputc:成功返回放入字符的int值,失败返回EOFfgetc:成功返回获取到字符的int值,失败返回EOFfputs:成功放入返回非0,失败返回EOFfgets:成功返回目标空间首地址,读取失败返回EOFfprintf:成功返回输出的项数,失败返回负值fscanf:成功返回存入的项数,失败返回EOF。
2026-02-11 15:58:18
989
原创 动态内存管理函数
在给变量赋值,创建数组等操作时,都需要在内存中开辟一块空间,这时开辟的空间是个固定的不能调整,但是有时候对空间的需求需要运行时才知道,所以需要一种动态管理内存空间的方法,可以自由调整空间的大小下面介绍动态内存管理的几种方法。
2026-02-07 21:19:53
1089
原创 结构体深入学习
如下图,第一个数据c1放在偏移量为0的地方,第二个数据i,对齐数是4,小于8,所以对齐数是4,从位置4开始存放,123的位置就被浪费了,第三个数据对齐数是1,所以放在9即可,但是结构体变量大小是最大对齐数的整数倍,只能是12,所以一直要到偏移量为12的位置之前,所以最终的大小就是12。第一个数据c1对齐数为1,放在0,第二个数据是个结构体变量,对齐数为8,大小为16,从8开始放,第三个数据d对齐数为8,从24开始放,放到32之前,最终大小为32,刚好是8的倍数,所以该结构体的大小为32。
2026-02-06 18:01:27
1189
原创 整数与浮点数在内存中的存储
对于E,E是一个无符号整型,如果用8位二进制存储,取值范围是0-255,11位二进制存储,取值为0-2047,但是科学计数法中E可以存在负数,所以需要加上一个中间值来保证存储进去的E一定是非负数,从而符合E无符号整型的类型,对于8位E,加上127,对于11位E,加上1023。对于M,既然1<=M<2,所以M的结果应该是1.xxxxxxx,因为默认第一位是1,所以存储有效数字的时候,可以省略这个1,从而可以多储存一位数字,整数部分的1等到读取的时候再加回去就行。
2026-02-06 10:15:47
1736
原创 C语言内存函数的应用与模拟实现
memcpy函数可以实现内存空间的复制,所以在传入第三个形参的时候,应该传入字节数。memmove可以实现内存空间的移动,一般在同一个空间内部使用整块空间的移动。返回>0说明前者大于后者,返回<前者小于后者,返回0说明前num个字节相等。对于int类型,一个元素占4字节,所以复制20字节相当于复制5个元素。char类型一个元素占1字节,所以复制6字节相当于复制6个元素。传入需要比较的两个内存空间,与比较的字符数。三个参数,目标空间,插入值,更改的字节数。返回值是目标空间的首元素地址。
2026-02-05 14:10:02
694
原创 数组与函数
当库函数不能满足我们的需要时,就得创建一个自定义函数来实现目的一个自定义函数的定义方式如下,需要有返回类型,函数名以及传入参数,如果用不到任何参数形式参数部分可以不写一般的函数进行的是传值调用,即在调用函数时将实际参数传入,用函数内部临时创建的临时变量来接收,函数运行完成后临时参数内存被释放而且不改变实际参数由运行结果可知a和b的值并没有被修改,如果希望值被修改,则需要用指针传址调用,可以在我的指针部分的文章学习x = 10;y = 20;
2026-01-30 15:28:30
1044
原创 指针深入学习-3
不仅可以根据年龄排序,根据名字也可以进行排序,涉及字符串的比较大小,要用到strcmp这一个函数,strcmp(str1,str2),如果str1大则返回1,str2大返回-1,相等返回0,刚好契合qsort比较函数所需要的,代码和结果如下。4.这是一个函数指针的形式,用于接收一个比较函数,它的返回值是用来决定qsort的拍排序结果是升序还是降序,当返回正值时会进行一次交换,其他值不做改变。由运行结果可知,arr1因为没有\0所以计算的字符串长度是未知的,而arr2末尾有一个隐藏的\0,
2026-01-28 15:28:14
723
原创 指针深入学习-2
首先要知道的是[ ]优先级是高于*的,所以第一段代码,pa先和[ ]结合构成一个数组,int*是数组内存放的元素类型,而第二段代码,用()与pa结合,保证先让*与pa结合成一个指针,[3]是指向数组的元素个数,int是指向数组元素的类型,所以上面的是指针数组,下面的是数组指针。首先我们知道,指针指向的是一个地址,所以函数应该也是有地址的,运行下面代码,我们可以知道,函数也是有地址的,且函数名就是它的地址,可以不使用取地址符。数组指针变量用来存放数组地址的,那如何获得数组的地址呢,可以用&arr。
2026-01-27 10:59:27
693
原创 指针深入学习-1
加1之后的结果,每两行进行对比我们可以发现,当arr和&arr[0]加1时,地址移动了4个字节,但是&arr+1移动了20个字节,而arr的大小刚好是20个字节,说明其实是跨过了整个数组,所以&arr是存储了整个数组的地址,只不过是按数组地址最低的进行存储,但是移动一位就会跨过整个数组的长度。const可以放在*的左右两边,但是表达的含义不同,当放在左边时,修饰的是指针指向的值,而放右边时,修饰的是p1指向的地址,如果都不想改变,可以使用两个const。
2026-01-26 15:18:03
908
原创 C语言数据类型与变量介绍-1
在C语言中,我们获取一个变量,类型或者一段表达式的长度可以使用sizeof进行获取,单位是字节,如下图表示,因为int是四个字节,所以返回4,char是一个字节返回1,而对于数组,它的长度等于元素个数乘以每个元素的长度,如果具体想知道某个类型的长度或者表达式长度可以自行使用sizeof操作直接得到。使用unsigned的好处是对于同样的内存空间,如果确定了返回类型没有负数,那么表示的范围是有符号类型的两倍,假设原本的内存可以表示-128~127,那么无符号就可以表示0~255,表示的数据范围扩大了很多。
2026-01-25 20:03:45
660
原创 指针的初步学习
计算机将内存划分为一个个的内存单元,每个单元大小为1字节(1B)一个比特位可以储存1或0两种情况,1B=8bit,每个字节存储八个比特C语言中将地址起名为:指针内存单元编号=地址=指针在C语言中创建变量本质是向内存申请一块空间例如创建一个整型变量a,那么就是向内存申请一块大小为4字节的空间,每个空间单元一个字节想要得到一个变量的地址,我们可以使用取地址符&,获取的是地址较小的地址,即首地址通过&得到的地址是一个数值,而这个数值如果需要储存起来方便后续使用,就需要存到一个地方。
2026-01-25 20:00:06
673
原创 C语言基础概念
但是实际上arr1在计算时会出问题,我们观察运行结果,为什么左图是35和3,而右图是3和3,很明显右图才是我们想要的结果,问题就出在\0上,当没有\0时,strlen就找不到该字符串的末尾,于是在内存空间中找,找到了才停下,而且我们不知道它到底是从哪里找到的\0,只知道不符合我们想要的结果,而arr2中的字符串默认末尾是\0,长度就是正常的3。注释是写给程序员自己看的内容,常用于解释一些复杂代码,增加代码的可读性,而在编译器编译代码时,这些注释是会被忽略的,所以不影响代码的使用。
2026-01-24 20:38:29
587
原创 初识C语言
C语言是一门编译型的计算机语言,需要依赖编译器转换语言,使得其可以被机器执行常见的编译器有:msvc,clang,gcc,也有一些集成开发环境,例如:VS2022,XCode,CodeBlock,DevC++,Clion一般使用VS2022进行代码的编写,很多人听说过vscode这个软件,但是vscode实际不太适合新手使用,还有就是DevC++,虽然其使用简便,但是很多会忽略很多潜在bug,比较粗糙,所以一般推荐VS2022,下载也很简单,直接搜索VS2022,在官网直接下载即可。
2026-01-23 13:47:11
298
原创 我的第一篇博客
高考后本来是报的别的专业,但是24年分数线突然变动,意外录入本校的计算机专业,因为高中对编程的抵触感,大一也就是混混日子,没有认真去学习C语言的知识,到了大二慢慢意识到,一直混下去是没有出路的,未来找实习,找工作必然要求有夯实的基础以及编程能力,所以我开始四处找课程与资料去学习,希望从现在开始还来得及,不论结果如何,我相信学习的过程总是会收获,学到的知识在未来肯定会反馈给我。现在的打算是先系统学习C语言的基础知识,只有稳定扎实的基础才能走得更远,下一步是学习C++算法方面的知识,比如数据结构。
2026-01-23 13:45:55
34
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅