自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++类和对象——中

像Stack这样的类,虽然也都是内置类型,但是_a指向了资源,编译器⾃动⽣成的拷⻉构造完成的值拷⻉/浅拷⻉不符合我们的需求,所以需要我们⾃⼰实现深拷⻉(对指向的资源也进⾏拷⻉)。这⾥还有⼀个⼩技巧,传值返回会产⽣⼀个临时对象调⽤拷⻉构造,传引⽤返回,返回的是返回对象的别名(引⽤),没有产⽣拷⻉。我们初始化mq时调用编译器自动生成的构造函数,因为MyQueue类的属性只包含两个栈,初始化时就会自动调用栈的构造函数,然而栈的构造函数是我们写好的,所以综上,MyQueue的构造就不用我们直接写了。

2024-08-01 23:41:59 781

原创 C++类和对象——上

类的定义, 类的实例化,this指针,C++和C语⾔实现Stack对⽐

2024-08-01 19:02:22 1075 1

原创 C++之inline与nullptr

C++之inline与nullptr

2024-07-31 06:00:00 457 1

原创 C++之引用(详解,引用与指针的区别)

C++之引用(详解,引用与指针的区别)

2024-07-30 13:24:57 1122 3

原创 C++入门基础—(命名空间,输入输出,缺省参数,函数重载)

1983年,Bjarne Stroustrup在C语⾔的基础上添加了⾯向对象编程的特性,设计出了C++语⾔的雏形,此时的C++已经有了类、封装、继承等核⼼概念,为后来的⾯向对象编程奠定了基础。这⼀年该语⾔被正式命名为C++。在随后的⼏年中,C++在学术界和⼯业界的应⽤逐渐增多。⼀些⼤学和研究所开始将C++作为教学和研究的⾸选语⾔,⽽⼀些公司也开始在产品开发中尝试使⽤C++。这⼀时期,C++的标准库和模板等特性也得到了进⼀步的完善和发展。

2024-07-30 06:00:00 996

原创 C语言 栈和队列力扣刷题—用栈实现队列,循环队列

前面我发布了栈和队列的相关博客其中第二篇博客中有一题是用队列实现栈与下面的题目一类似,思路也类似,可以对照一起学习。

2024-05-16 17:35:56 883 11

原创 (C语言)队列实现与用队列实现栈

队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out) 入队列:进行插入操作的一端称为出队列:进行删除操作的一端称为。

2024-05-15 20:48:51 374 10

原创 (C语言)栈与解题运用

一种特殊的线性表,其只允许在进行插入和删除元素操作。进行数据插入和删除操作的一端称为另一端称为栈中的数据元素遵守后进先出LIFO)的原则。:栈的插入操作叫做进栈压栈入栈,。:栈的删除操作叫做出栈。。栈的实现一般可以使用,相对而言数组的结构实现更优一些。因为数组在尾上插入数据的代价比较小。

2024-05-09 23:02:02 507 9

原创 (C语言)文件操作与函数,超详解

这样可以减少磁盘I/O操作的频率,因为多个小的I/O请求可以先在缓冲区中累积,然后一次性写入磁盘。如果从磁盘向计算机读⼊数据,则从磁盘⽂件中读取数据输 ⼊到内存缓冲区(充满缓冲区),然后再从缓冲区逐个地将数据送到程序数据区(程序变量等)。缓 冲区的⼤⼩根据C编译系统决定的。因为有缓冲区的存在,C语⾔在操作⽂件的时候,需要做刷新缓冲区或者在⽂件操作结束的时候关闭⽂件。因为是二进制写入的所以我么无法看到文件的内容但是我们通过打印发现文件内容就是我们写入的double类型的1,2,3,4,5。

2024-05-02 16:25:50 1142 12

原创 (C语言)sscanf 与 sprintf详解

1.sprintf函数详解头文件:stdio.h作用:将格式化的数据写入字符串里,也就是将格式化的数据转变为字符串。sprintf将s1中的数据写入了字符串arr中,并打印出来。

2024-04-20 22:35:28 545

原创 (C语言)fscanf与fprintf函数详解

可见文件中的确以格式换的方式出现了结构体的数据。该函数和printf函数很像,格式化部分和prinf函数一样,只是可以控制数据到哪个流当中去。该函数和printf的参数特别像,只是多了一个参数stream,同样的fscanf和scanf很行只是多了一个stream。这样结构体的数据就打印到了标准输出界面了。头文件:stdio.h。头文件:stdio.h。

2024-04-20 21:58:19 794

原创 (C语言)fread与fwrite详解

头文件:stdio.h函数有4个参数,只适用于文件输出流作用;将从ptr中拿count个大小为size字节的数据以二进制的方式写到文件流中。返回写入成功的数目。演示date.txt文件:我们以二进制的形式写到文件中去所以显示是乱码。一会我们可以用fread函数读取再打印出来。接着向下看。

2024-03-30 16:26:33 849 4

原创 (C语言)fgets与fputs函数详解

头文件:stdio.h函数有两个参数:str 与 stream。

2024-03-30 14:06:45 1134 4

原创 (C语言) fgetc与fputc函数详解

以‘w’的模式打开文件;若没有date.txt文件,会自己创建一个,若有该文件则清空原内容在进行数据的输入。这里我们完成了字符的输入。可见我们成功从date.txt文件中读取到了数据,fgetc读到文件末尾,返回EOF因此,读取结束。可见fgetc不会跳过空格,会将一个一个的将字符读取过来。函数有两个参数:charactor和stream。arr中的数据被打印到了标准输出流上。该函数只有一个参数:stream。头文件:stdio.h。头文件:stdio.h。

2024-03-30 11:34:42 1095 2

原创 (C语言)结构体类型详解——结构体使用,内存对齐原则,结构体传参

1. 结构体类型的声明结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。

2024-03-23 19:40:03 1230 5

原创 (C语言)浮点数在内存中的存储详解

后23位的有效数字M=000 0000 0000 0000 0000 1001。,最高的1位存储符号位S,接着11位存储指数E,剩下的52位存储有效数字M。,写成二进制是 -101.0 ,相当于 -1.01*2^2。原因在于浮点数的存储方式与整形有很大不同,下面我们来看一下。我们学习了浮点数的存储下面我们回过头来看看前面的那道题目。,E为一个无符号整数(unsigned int)。,浮点数的指数E直接等于1-127(或者1-10。,其中xxxxxxxxxx表示小数分。,剩下的23位存储有效数字M;

2024-03-23 14:29:33 1173 4

原创 (C语言)memcpy函数详解与模拟实现

这个函数和memcpy有点像,但是它是以字节为单位完成复制的num是要复制的字节数,destination是要复制到的地址,source是数据来源的地址。因为要实现多种类型的拷贝所以接收参数是void*类型,可以接收任何类型的地址,函数内强制类型转换,进行一个一个字节的拷贝,这样就可以拷贝多种类型数组了。若arr1的大小不足要拷贝的大小,那么会将arr1外面的数据拷过来,产生危险,因此在使用时要考虑好大小关系。若arr2的大小小于要拷贝的的小,在运行时会报警告,表示arr2周围的堆栈以损坏。

2024-03-19 21:39:06 977 3

原创 (C语言)整数在内存中的存储与大小端

其实超过一个字节的数据在内存中存储的时候,就有存储顺序的问题,按照不同的存储顺序,我们分为大端字节序存储和小端字节序存储大端(存储)模式:是指数据的低位字节内容保存在内存的高地址处,而数据的高位字节内容,保存在内存的低地址处。小端(存储)模式:是指数据的低位字节内容保存在内存的低地址处,而数据的高位字节内容,保存在内存的高地址处。2.2 为什么有大小端?这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8bit 位。

2024-03-17 13:15:24 1071 6

原创 (C语言)atoi函数详解与模拟实现

字符串开头是空格或制表符时,函数会自动跳过他们向后找直到找到正负号或数字,但找到数字后接着向后找,直到找到非数字的字符(包括空格)或\0停下,并以整型类型返回前面找到的数字。若第一个找到的不是数字而是字符那么函数会返回0。它是指向char类型的指针类型,函数作用是将字符串中的数字转变为整型类型,并返回。可见字符串前面的空格和制表符都被函数跳过了,字符a后面的数字也没有读取到,123前有字符a所以找到a后函数就停止了向后的遍历。可见读取12后遇到空格就结束了。头文件

2024-03-17 11:55:00 686 3

原创 (C语言)strcmp函数详解与模拟实现与strncmp详解

原理是一个一个字符向后进行比较,当比到不一样的字符时,看看谁的asscill码值大,以此来比较大小,后面的字符就不用比了。因此在上面的代码中比到g与a时就比出结果,g>a因此返回大于0的值返回了1.arr1提前找到了\0,但是arr2还没有结束,我们规定的字符是9因此还会向后比较arr1中的\0与arr2中的a进行比较,显然arr1<arr2,因此返回-1.我们可以看到arr1与arr2是不同的但是在\0之前是相同的,strcmp比到\0就结束比较了,因此返回了0.若str1>str2返回大于0的值。

2024-03-13 20:31:50 771 1

原创 (C语言)strcat函数详解与模拟实现与strncat函数详解

头文件<string.h>该函数是用来对字符串末尾追加字符串的,有两个参数,destination是要被追加的字符串,source是要追加的字符串,函数返回destination结果是:在arr2后追加了arr1的内容,但追加后arr2后是否还有\0呢我们来看一下可见strcat从arr2可中第一个\0开始追加,无论后面还有没有数据,并且arr2后面是被主动加了一个\0,

2024-03-13 19:36:06 1896

原创 (C语言)strcpy详解与模拟实现与strncpy详解与模拟实现

作用:完成字符串的复制。头文件:destination是字符串要复制到的地点,source是字符串的来源,返回值是destination。

2024-03-10 14:40:19 934 5

原创 (C语言)strlen函数模拟实现(三种方法)

头文件实现函数模拟须知:•字符串以'\0'作为结束标志,strlen函数返回的是在字符串中'\0'前⾯出现的字符个数(不包含 '\0'•参数指向的字符串必须要以'\0'结束。•注意函数的返回值为size_t,是⽆符号的( 易错 )2. 注意事项:1. size_t类型为unsigned int类型,因为字符串长度一定为正所以肯定是是无符号类型。当然int类型也可以,只是size_t更符合原函数。

2024-03-10 12:54:57 640 1

原创 (C语言)字符分类函数

字符分类函数C语言中有一系列的函数是,也就是一个字符是属于什么类型的字符的。这些函数的使用都需要包含一个用于判断一个字符是否为控制字符。iscntrl函数原型如下:``````其中参数c是需要判断的字符。如果c是一个,则`iscntrl`返回非零值(随机)(通常是1);否则,返回0。

2024-03-08 22:04:30 1237 3

原创 (C语言)深入理解指针2之野指针与传值与传址与assert断言

因为:当执行到swap函数时,在函数内部的a/b并不是主函数中的a/b,而是进入函数后重新创建的变量,和原来的a/b只是在数值上相同,交换的也只是swap函数中的a与b的值,原来main函数中的a与b的值并没有变化,退出swap函数后,在swap函数中创建的a与b也被销毁了,生命周期就结束了,这种叫作。那么就可以使⽤指针了,在main函数中将a和b的地址传递给Swap函数,Swap函数⾥边通过地址间接的操作main函数中的a和b,并达到交换的效果就好了。之前的字符个数,最终返回⻓度。

2024-03-06 16:41:49 1081 2

原创 (C语言)深入理解指针1基础

前⾯的内容我们了解到,32位机器假设有32根地址总线,每根地址线出来的电信号转换成数字信号后是1或者0,那我们把32根地址线产⽣的2进制序列当做⼀个地址,那么⼀个地址就是32个bit位,需要4个字节才能存储。我们知道C语言中一个整形占4个字节,创建时会向内存申请4字节的空间,当取整形变量的地址时会取出4个字节地址的第一个地址,因为知道是int类型,当需要这个变量时就能顺藤摸瓜,将这4个字节全部访问。注意指针变量的⼤⼩和类型是⽆关的,只要指针类型的变量,在相同的平台下,⼤⼩都是相同的。

2024-03-06 15:04:31 1117 1

原创 (C语言)sizeof和strlen的对比(详解)

1. sizeofsizeof和strlen的对⽐(详解)1. sizeofsizeof是用来计算变量所占内存空间大小的,,如果操作数是类型的话,计算的是用类型创建的变量所占空间的大小。sizeof只关注占用内存空间的大小,不在乎内存中存放什么数据。当sizeof操作对象是变量名时,可以不加括号,从不加()就可以看出sizeof不是函数,函数是必须加()的,这一点经常有人记错,误以为sizeof是函数要注意。

2024-03-04 13:01:16 579 1

原创 (C语言)qsort函数模拟实现

前言我们需先了解qsort函数qsort函数可以排序多种数据类型,很是神奇,这是为什么,我们在里模拟实现这样的功能。

2024-03-03 15:46:00 769 10

原创 (C语言)冒泡排序

从前往后遍历数组,前一个比后一个大时,交换这两个函数,大的排后面,外层一边for循环后将数组中最大的元素放在了数组最后,这个元素就不再动,不在参与比较了,接下来排前面的元素,外层每循环一遍,则在数组后面确定一个元素,相当于从后往前确定元素位置。若还没理解请仔细观看代码截图,仔细思考。其中bubble函数是冒泡函数的主体。

2024-03-03 14:56:10 401

原创 (C语言)qsort函数详解

1. qsort解释1. qsort解释来看一下这个函数的介绍:头文件为:stdib.hqsort函数可以排列多种类型的数据,这就有回调函数的作用;第一个参数是void*类型,第二个和第三个参数都是size_t类型,第四个参数是是int (*)(const void*,const void*)及函数指针类型。第四个参数是要我们自己写出函数,在这就是回调函数再往下看:base:是要排列数组的第一个元素的地址,转换为void*类型num:是数组中的元素数。

2024-03-03 14:18:05 471

原创 (C语言)回调函数

因为红笔圈住的代码,只有调⽤函数的逻辑是有差异的,我们可以把调⽤的函数的地址以参数的形式 传递过去,使⽤函数指针接收,函数指针指向什么函数就调⽤什么函数,这⾥其实使⽤的就是回调函数的功能。回调函数不是由该函数的实现⽅直接调⽤,⽽是在特定的事件或条件发⽣时由另外的⼀⽅调⽤的,⽤于对该事件或条件进⾏响应。圈住的函数没有在主函数中调用,是将函数作为指针传给另一个函数,在这个函数中调用圈住的函数,,圈住的函数就叫做回调函数。如果你把函数的指针(地址)作为参数传递给另⼀个函数,当这个指针被⽤来调⽤其所指向的函数。

2024-03-02 23:13:17 492 2

原创 (C语言)函数详解(下) 项目多文件操作 extern ,static详解

一般我们在使用函数的时候 ,直接将函数写出来就使用了。比如:我们要写一个函数判断一年是否是闰年。上面代码中划红线的部分是函数的定义 ,划黄线的部分是函数的调用。这种场景下是函数的定义在函数调用之前 ,没有问题。

2024-03-01 21:23:40 1392 1

原创 (C语言)函数详解上

的。7.2 链式访问所谓链式访问就是将一个函数的返回值作为另外一个函数的参数,像链条一样将函数串起来就是函数的链式访问。strlen函数的返回值作了printf函数的参数,这就是链式访问。在看一个有趣的代码,下面代码执行的结果是什么呢?这个代码的关键是明白。

2024-03-01 20:17:01 1235 1

原创 (C语言)二分查找

中查找指定的数字n,很容易想到的⽅法就是遍历数组,但是这种⽅法效率⽐较低。⽐如我买了⼀双鞋,你好奇问我多少钱,我说不超过300元。你还是好奇,你想知道到底多少,我就让你猜,你会怎么猜?你会1,2,3,4...这样猜吗?⼀般你都会猜中间数字,⽐如:150,然后看⼤了还是⼩了,这就是。printf("找到了,下标是%d\n", mid);当然要找的数也可以外部输入,进行更自由的寻找。printf("没找到");//二分查找,前提是。

2024-02-29 19:01:34 597

原创 (C语言)Sleep函数,system函数,数组练习,详解与运用

1. system函数我们看过可一维数组与二维数组,现在我们来进行简单的练习。题目:编写代码,演⽰多个字符从两端移动,向中间汇聚1. system函数头文件:stdlibsystem()可以执行windows操作指令,括号中填入操作系统的指令原型如下:参数command是一个字符串,表示要执行的命令。当调用system函数时,它会创建一个子进程,并在子进程中执行指定的命令。在命令执行完成后,system函数会返回命令的退出状态。返回值command用法如下我们会用到第三个——清屏。

2024-02-28 19:34:29 1884 3

原创 二维数组详解(C语言)

它的好处是程序员不必在开发时,随意为数组指定⼀个估计的⻓度,程序可以在运⾏时为数组分配精确的⻓度。有⼀个⽐较迷惑的点,变⻓数组的意思是数组的⼤⼩是可以使⽤变量来指定的,在程序运⾏的时候,根据变量的⼤⼩来指定数组的元素个数,⽽不是说数组的⼤⼩是可变的。数组的元素都是内置类型的,如果我们把⼀维数组做为数组的元素,这时候就是⼆维数组,⼆维数组作为数组元素的数组被称为三维数组,⼆维数组以上的数组统为多维数组。其实⼆维数组访问也是使⽤下标的形式的,⼆维数组是有⾏和列的,只要锁定了⾏和列就能唯⼀锁定数组中的⼀个元素。

2024-02-28 13:34:50 1251 2

原创 一维数组详解(C语言)

arr2数组的类型是 int[12]ch 数组的类型是 char[5],多维数组一般比较多见的是二维数组。中C语⾔是⼀个关键字,是可以计算类型或者变量⼤⼩的,其实。,数组在创建的时候可以指定数组的大小和数组的元素类型。以后在代码中需要数组元素个数的地方就不用固定写死了。可以使用arr[7] ,想要访问下标是3的元素。在C语言中数组的访问提供了一个操作符 []算出的大小也就随着变化了。,这个数组的大小是根据实际的需求指定就行。只要我们产生数组所有元素的下标就可以了。,我们就可以轻松的访问到数组的元素了。

2024-02-27 20:10:54 1047

原创 猜数字游戏(详解)

我们可以看到虽然⼀次运⾏中产⽣的5个数字是相对随机的,但是下⼀次运⾏程序⽣成的结果和上⼀次⼀模⼀样,这就说明有点问题。如果再深⼊了解⼀下,我们就不难发现,其实rand函数⽣成的随机数是伪随机的,伪随机数不是真正的随机数,是通过某种算法⽣成的随机数。真正的随机数的是⽆法预测下⼀个值是多少的。printf("*********猜字游戏********\n");printf("******* 1,开始游戏******\n");printf("******* 0.退出游戏******\n");

2024-02-27 18:48:08 1099

原创 C语言 分支循环(下)

当i等于5后,就执⾏continue,直接跳过continue的代码,去循环的判断的地⽅,因为这⾥跳过了i = i+1,所以i⼀直为5,程序陷⼊和死循环,可见程序一直没有结束。在循环执⾏的过程中,如果某些状况发⽣的时候,需要提前终⽌循环,这是⾮常常⻅的现象。的作⽤是永久的终⽌循环,未来我们在某个条件发⽣的时候,不想再继续循环的时候,就可以使⽤ break。后边的代码,直接到循环的判断部分,进⾏下⼀次循环的判断,如果循环的调整是在 continue。是继续的意思,在循环中的作⽤就是跳过本次循环中。

2024-02-26 21:05:20 1265 2

原创 scanf()函数(详细)C语言基础

scanf() 处理⽤⼾输⼊的原理是,⽤⼾的输⼊先放⼊缓存,等到按下回⻋键后,按照占位符对缓存进⾏解读。解读⽤⼾输⼊时,会从上⼀次解读遗留的第⼀个字符开始,直到读完缓存,或者遇到第⼀个不符合条件的字符为⽌。上⾯⽰例中,⽤⼾分成四⾏输⼊,得到的结果与⼀⾏输⼊是完全⼀样的。每次按下回⻋键以后,scanf() 就会开始解读,如果第⼀⾏匹配第⼀个占位符,那么下次按下回⻋键时,就会从第⼆个占。scanf中是用,隔开的,输入数据时以要用,隔开,但为了避免用户输入数据不规范,导致scanf解析数据失败,

2024-02-25 20:26:11 3737 2

空空如也

空空如也

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

TA关注的人

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