自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++11

问题就出在当我们把参数传递给perfectforward之后,这里的T模板虽然是一个万能模板,但是注意看下一句Fun函数的调用,根据前面说所,右值是没有地址的,如果t是一个右值,那么他又如何作为参数来进行传递,这里我们看到以为t是一个右值,但其实他的本质还是一个左值。当我们实例化一个类的时候,通常会在初始化列表对其中的成员进行初始化,其成员个数也是我们需要在传参时进行匹配的个数,如果当我们传递的参数与构造函数的参数不匹配的时候它会报一个参数不匹配的错误。同样,捕捉列表也是可以结合起来的。

2023-10-06 12:08:30 302 11

原创 布隆过滤器

如果使用第一种的话,40亿个整形数据,每个整形4个字节,就大概需要将近16G的内存,一台普通家用电脑可能也才16G,那么说只跑这个程序就需要占掉电脑的所有资源,显然是行不通的,那么第一种行不通第二种当然也无法解决这个问题了。如果我现在有一家新公司要注册,但是不知道这个名字有没有被注册,那么我们就可以去这个名字对应的三个位置去查找,只要有一个位置的状态是0,那么就说明这个名字一定没有被注册,因为被注册过的一定是三个位置都位真的状态。那么,在面对海量数据的时候也是可以完美解决的。那些已经看过的内容。

2023-10-05 10:27:20 264 3

原创 AVL树的实现及原理

第一次右旋调整结束之后,我们继续往上更新,接下来进行左旋,同样根据左旋的性质,cur的leift做parent的右边,parent做cur的左边,cur做新的根,当这一次调整结束之后,这棵树又会重新符合条件。同样我们也可以根据搜索二叉树的特性,curleft是一定比parent大的,那么我们就可以让curleft去做parent的右边,parent做cur的左边,cur做新的根节点。然后在根据右旋的特性,让cur的右边成为parent的左边,parent成为cur的右边,cur成为新的根。

2023-10-03 13:54:26 349 3

原创 不过是一棵红黑树(附源码)

在数据结构学习的初期我们了解到了搜索二叉树,并且知道搜索二叉树的效率是非常之高的,在理想情况下10亿个数据中找一个值它也只需要30次左右,但是它尽管如此厉害可是也有不足的地方,在一些极端情况下,搜索二叉树可能会被退化成一棵单链表,那么此时它的效率就会大打折扣的变成O(n)。最后就会违背第4条规则,所以当叔叔不存在的时候,我们对其颜色改造之后,在进行旋转一下,让cur做parent的左边,grandfather做parent的右边,这样既不违背搜索二叉树的规则,又不违背红黑树的规则。这是红黑树就由此诞生了。

2023-09-20 17:09:00 209 5

原创 浅入深出充分理解-->(fork())父子进程

但是我们的电脑不可能只有一个进程,当进程需要被加载到内存中之前,操作系统会根据进程的PCB,为该进程创建对应的PCB,PCB被创建出来之后会由PCB在指向这个进程中的代码和数据。比如在我们的学校中,有校长,辅导员,学生。在调度fork之前会,父进程会有自己的ppid(父进程编号)和pid(子进程编号)数据和代码,cpu可以直接去调度父进程,当fork创建出来子进程之后,子进程也会有自己的ppid和pid数据和代码,但是只有父进程的代码和数据没有子进程的,那么此时子进程就会和父进程指向同一块代码。

2023-08-22 17:56:24 257 7

原创 搜索二叉树

在这里我们先了解一下什么是搜索二叉树,搜索二叉树,顾名思义它要满足搜索的特征,于是就有人想出来一个办法,我能不能在创建一个树的时候,比它小的值放在左子树,比它大的值放在右子树呢,这样的话当我们要去寻找某一个节点的时候,只需要比较一下左右子树,如果这个值大就往它的右边走,比它小就往它的左边走呢。答案是否的,在某一个情况下我们想要寻找一个节点消耗的时间也是非常困难的。比如说是这样的一个搜索二叉树,它在图形上有点像我们的单链表,这样的一棵树如果要去寻找某个节点值的时候效率也是会达到o(N)的。

2023-08-17 11:29:17 386 1

原创 离多态更近一步

在不少的题目中我们时长能看见一个问题,虚表到底是存放在哪里的。当我们去往上查阅的时候都能出奇的发现一个答案,虚表是存放在静态区中的。对此我曾感到疑惑,存放数据的地方无非有栈,堆,静态区,常量区,首先我们可以排除堆区,因为系统不会自己去开一块空间来使用。接下来我们先了解一下虚表的存放体制,当一个对象在局部域中被创建出来并且它其中也有一张虚表,当局部对象被销毁后在另一个域类定义同一个对象,会发现它们使用的是同一张虚表。

2023-07-26 09:40:04 162 2

原创 虚继承是如何解决二义性和数据的冗余的

此时,我们利用B类定义一个对象,然后在用B类定义一个指针,让指针指向这个对象并且对对象中的_a进行操作,然后在让这个指针指向对象d,同样对d对象中的_a进行操作,那么此时的指针是无法知道具体指向谁的,它可能指向b对象,也可能指向d对象,所以这是就会利用偏移量,加上偏移量的值之后无论是b还是d都可以找到_a。当把虚继承关键字加上去再去观察内存的时候明显发现,此时B,C类中原本为A的数据区被写道了最后一个位置,而原本的位置变成了一个地址,如果我们通过地址找过去看看又会发现什么。那么这个偏移量是用来干什么的呢。

2023-07-23 18:04:24 317 3

原创 浅谈优先级队列

优先级队列就如何它的名字一样,同样是一个队列,同样遵循先入先出的规则,但不同的是它被叫做优先级队列,如同它的名字一样,在它内部是按照优先级来排序的,优先级也决定了哪个数据会被先出队列。当我们写下这样一段代码之后发现,less并不是向我们想象的一样是小的数先出队列,而是较大的数先出队列,那么说明less按小于比较,并且会将小于的数放在队列后面,对此我们可以试一试如果用大于来比较会不会是相反的结果。其实它的底部是利用了一个建堆的算法,当一个数进入队列之后,会对这个数进行比较,如果这个数较大就会把它往顶上推。

2023-07-22 12:00:11 77

原创 List迭代器是如何实现的

最后当我们看完之后发现list并没有像vector或者string那样,对[]进行重载,原因是因为,由于list的存储结构是链式状的,当我们想像vector那样去用[]对其访问时是无法知道[]的位置的。了之后发现,迭代器的++行为实际上是将当前结点的指针改为下一个结点的指针,那么由此我们可以得出,当使用--操作的时候实际上是将当前指针的指向改为上一个结点。此时我们就会好奇,链表是不像顺序表那样进行++操作的时候它通过顺序表的结构优势直接找到下一个位置,对其解引用同样可以直接拿到它的值的。

2023-07-19 17:36:25 1387 2

原创 Vector迭代器失效问题

或者还有一种情况就是,当我们需要连续的删除容器中某个数据的时候,刚好这个数据在最后一个位置,那么同样也是会造成问题的,从vector底层来看,vector的迭代器实际上是个指针来判断的,第一个是_start,第二个个是_finish 第三个是_endofstorage,在删除最后一个元素的时候实际上是_finish向前挪动的一个数据,所以当我们再去判断的时候此时it指针已经越过了_finish造成了边界判断失效的问题。当我们在使用vector的迭代器的的时候,感觉思路上是没有问题的,但是就是会报错。

2023-07-18 18:24:36 332

原创 string底层是如何实现的

首先看第一种,n比size小很好实现,我们不必真的去删除后面的字符,直接可以在n的地方放一个字符0来表示结束就行,那么第二种情况和第三种情况我们都可以并为一种,无论是比总容量大还是比总容量小,我们都直接释放掉当前指针指向的那块空间,然后去新开一一块大小为n+的空间,把新的空间给到原来的空间。在我们学习的时候总是会用到string,知道它具备各种功能,它也是一种很强大的模板,那么有没有想过,我们天天都在使用的它,它的底层又是怎么样的,它又是如何实现的呢。那么什么是有效字符呢,就是在对象中实际的字符串长度、

2023-07-07 17:10:07 400 1

原创 自动化构建工具(Makefile/make)

那么我们今天的主角,makefile就能完美的解决这个问题,它可以按照一系列的规定来指定,哪些文件需要先编译,哪些文件需要后,哪些文件需要重新编译,以及一些更复杂的操作都能轻松解决。难道每一个文件都要依次的去敲一遍编译命令。它说大概就是我们的文件没有和更新,不需要去执行make,大家可能会觉得奇怪,为什么不更新就不能执行了啊,其实它这是为咱们着想,你想一下,可能你一两个文件没什么,但是在一个大型工程里面,你要出执行一个文件是需要很长时间的,如果你文件没有改动过什么又去执行一次,那不是白白浪费很多时间吗。

2023-07-07 16:12:16 441

原创 快排(非递归)

在我们学习排序的时候一定接触过快排这个较优的排序,那么既然已经有这个排序了为什么还要去学习一个非递归的快速排序呢,设想一下,快排是利用了递归的思想,所以在排序的时候会占用大量的栈帧空间,如果处理不妥可能会造成数据溢出等一些情况,那么改为非递归就完全不用担心这个问题,这里我们要学习的不仅仅是快排的非递归,更多的是一种非递归的思想,假设你去某个公司上班,发现某段程序在一些特定的情况下会有溢出的情况,那么如何去优化就显得很重要。入栈之后我们开始划分,利用快排里面的前后指针排序的方法进行单趟排序。

2023-06-18 16:40:02 85

原创 Linux的超级用户及权限

在使用Linux的时候会有两个身份,第一个是普通用户,普通用户在很多方面是受阻的,原因就是权限不够,在这种情况下就有一个超级用户,也就是我们的root超级管理员。

2023-05-16 19:46:01 1893

原创 一个日期类深度认识operator符号重载

最后,当我们创建了一个日期对象,想去输出打印它的日期还得写一个print的函数来输出它的年月日,按照以前C语言的习惯,要输出的话还需要写一个printf打印每个数据对应的数据类型,但是在c++中有一个cout(流插入),可以直接识别我们当前的数据类型,但是它真的有这么神奇是完全靠自己去识别的吗,实则不然,我们可以去cplusplus网站看一下cout的原型。当我们写了大于和等于之后,直接可以复用前面写过的,例如我们现在要判断哪个日期比较小,只需要把上面写了的大于日期和等于逻辑取反一下,就可以完美实现小于,

2023-05-08 18:02:26 477 1

原创 C++刨析(this指针,构造,析构函数)

那为什么不可以在参数列表显示this指针呢,因为它是成员函数的第一个隐含的指针形参。在我们创建一个对象,对象去调用类中的函数的时候,有没有想过它是怎么进行修改的,回想我们以前写C语言的时候,如果我们写了一个栈,当需要操作栈中的数据时,我们需要把构造出来栈的变量的地址传过去,让函数拿到这个地址来对我们的栈进行出去操作。我们定义了一个对象,这个对象是存在栈帧中的,当我们去调用这个析构函数的时候不是说直接把对象销毁了,对象是在结束的时候由编译器去销毁的,而构造函数只是把对象中所占用的资源归还贵操作系统。

2023-04-25 10:58:15 700 4

原创 C++重载,缺省参数,引用

这里我们可以看到引用和指针实现的功能是一样的,但是指针在使用的时候会有各种解引用,可能还有造成空指针的问题,使用起来很不方便,所以我们的祖师爷当时在使用的时候也觉得这样地址传来传去的很麻烦,索性就把这个变量起一个别名,用别名来实现它。但是这里值得注意的是,在引用作为参数返回的时候,因为不会生成临时变量 ,所以返回值需要是在堆区或者静态区,因为在函数结束的时候会销毁栈帧,里面的变量同样也会被销毁,所以下次访问到这个值的时候是不确定测。在引用的过程中,权限是不可以被放大的,但是权限可以平移或者缩小。

2023-04-24 16:34:12 393

原创 归并排序(数据结构)

给我们一组数据,能排序的方法有很多,其中不乏有一些比较优势的排序,例如快排,希尔,堆排序一类的,他们的时间复杂度都很低,但为什么不直接采用堆排或者其他的排序呢,例如这里的归并排序。就比如在电脑的磁盘排序中,我们有一个500g的空间需要整理排序,如果我们用归并排序,就可以把500G的空间划分成250G在划分成125G一直到只剩最后1个G,然后依次取小的放回去,这样就很方便很多。归并排序的思想和快排有一些相识,快排是找一个数作为基础,以这个基数为基点,把比它小的划分到左边,比他大的划分到右边,依次往深层递归。

2023-04-12 09:48:21 145 2

原创 链表必刷题(复制带随机指针链表)

首先我们先在每一个原结点的后面添加一个新的结点,改变一下指向关系,然后把源节点的random的next复制给创建结点的random,最后我们在把两个链表断开,这样就能很好的解决这道题了。而链接的这个结点的random的next就是我们需要链接的那个结点。原结点的1的random指向的就是源节点的7,原结点7的next指向就是创建结点的7,那么我们就说,源节点的random的next指向的就是创建结点1的random的指向关系。将原链表的next链接到新的结点,新的结点的next连接到原结点的下一个结点。

2023-03-27 19:47:02 156 5

原创 栈,队列(数据结构)

但是如果按照1,2,3,4的顺序插入取出来的数据一定是4,2,3,1吗,其实也不是,可以是错乱的数据,比如我可以在插入1的时候就把1取出来,在插入一个2,插入3之后就把3取出来,那么顺序就会变成1--3--4--2。队列和栈有一个相同的性子,就是如果要出数据中的某一个元素,如果它的前面还有元素的话,那么就要把前面的元素全部出掉才可以出这个元素,但是不同的是,队列出元素是按照后进后出原则。什么是栈呢,栈其实是一种简单的数据结构,它遵循先入后出的原则,且它只能从栈顶出,如果对应的话就很像顺序表的尾插尾删。

2023-03-23 09:55:58 176 5

原创 环的多样性 (数据结构)

假设一个快的指针fast和慢的指针slow,快的指针每一次走两步,慢的指针每一次走一步,那么就会演变成这一个追击问题,快的指针每次走两步,慢的每次走一步,那么他们之间的距离每次就会缩小一步,那么这个问题就简单的演变成了一个追击问题,只要这是一个有环链表那么fast就一定会追上slow。当我们要证明它是一个环的话,可能会有一种想法记录他的入口结点来判断是否能再次指向这一个结点,但是这种想法是不可行的,因为我们不知道它入口的结点是哪一个,上图只是为了方便我们理解。其实这里有一个快慢指针的概念。

2023-03-13 18:57:48 316 6

原创 .C文件如何转化成可执行文件

当我们创建好这个文件并且已经写好代码的时候,对应路径下面就会生成一个.C的文件,当我们运行之后,文件中就会生成一个.obj位后缀的文件,在windo环境下面,这个就是我们的机器可识别的指令在经过编译链接最后就产生了一个后缀位.exe的可执行文件。其实不然,在合并的时候我们的Test文件里面的ADD只是用于一个声明,没有实际功能,它的地址也就是无效的,也就是说,在合并的时候只会保留一个有效的ADD地址也就是0X500的地址,而0X100的地址就会被舍弃掉。当编译阶段完成就来到了编译环节的最后一个阶段,汇编。

2023-02-09 12:17:50 2617 1

原创 通讯录(优化)

那这里我们就可以运用到这个函数,qsort有四个参数,第一个是传入排序的那个起始地址,第二个是需要排序的元素个数,第三个是排序的的大小,单位为字节,第四个就是比较函数,无论你是要按照什么方式排序,我们只需要传入这四个参数,qsort会自己帮我们搞定排序的问题,或者说你也可以自己去实现对内容的排序,前面我也写过,感兴趣的话可以去看一看。这里会涉及到我们的文件操作,我们在通讯录里面新增一个选项,当我们选择保存的时候,当前已有的联系人就能保存到我们的通讯录里面。怎么实现这个操作呢。接下来我们进入正题。

2023-01-16 13:10:37 438 4

原创 打印回型矩阵<——>蛇形矩阵(C语言)

这样看的话,如果奇数趟每往上一个数,x作为行坐标就要-1,而y作为列坐标就会+1,反过来如果偶数趟y作为起点坐标,每往下一个数y就需要-1,而x就要+1。这里我们就可以定义一个变量来记录看它是偶数趟还是奇数,如果是奇数趟就让这个变量为-1,每次数值一个数后就让x+上这个-1,而y就去减-1,,然后用一个数来作为每次需要放进矩形的那个数。从左——>右的时候就可以是strat作为数组的行,i作为列,让i每次++,count也每次++然后把count里面的值放进数组里面,就得到第一行了左——>右的数值。

2022-12-02 12:50:33 3491 1

原创 告别黑框框,EasyX教你重识C语言

接下里还有一个东西就是坐标,在数学中我们知道横坐标为X,纵坐标为Y,他们的起点坐标也就是(0,0)那么在EasyX中也同样是这样的,不同的是,比如说我话一个正方形,X,Y的坐标是从这个正方形开始画的那个地方为(0,0)出发的。例如这是我们的一个界面一面装着我们画出来的矩形,要把文字放入中间的话我们先拿到界面宽度的一半,在拿到文字的一般,用界面宽度的一半减去文字宽度的一半就得到起点到文字开始的距离,再用从起点加到文字的这段距离就得到我们居中的起点位置,从这里开始放文字就能恰好把文字放入中心点。

2022-11-25 10:27:21 2024 9

原创 扫雷小游戏(C语言)

如果我们在去看一看这个扫雷的棋盘就会发现,它是一个就是一个9行9列的一个图形,那么这九行九列我们是不是就可以用一个二维数组来存放呢,如果如果说我们直接上手写一个九行九列的图形行不行呢,我们在看上面扫雷的要求,它是要满足当我排查了一个位置之后它会统计周围有多少个雷然后显示出来,如果我们写9*9的话,当我们排查第九行或者第九列的时候,它去统计周围八个位置有多少雷是不是就造成了数组越界,所以我们这里就给上一个11*11行的数组。梳理之后这就是我们大致的一些思路了,那么接下来我们就开始复刻我们的童年回忆吧。

2022-11-10 16:46:57 275

原创 深刨栈帧中的函数,变量创建与销毁

最后来到我们的主函数里面,刚刚我们开辟空间的时候看到的是esp的值赋给了ebp,现在我们用完了它,需要释放main函数的空间了也就不需要ebp和esp来维护了,我们就可以把ebp的值给到esp,然后在pop 一下ebp那么此时的esp就指向了栈底,中间已经没有需要维护的栈区了。这是说sub这个指令会让esp的地址减去一个十六进制的0xe4,产生新的esp,此时的esp就是维护main函数的esp,结合刚刚得到的ebp,就产生了一块新的地址,那么这块地址就是为main函数预开辟的一块空间。

2022-11-03 20:44:51 482 6

原创 快排算法(分治法)

当right找到了比privot小的数我们就停止对他的移动,然后移动我们的left,同理,如果left遇到的数小于privot我们就不用管,直到遇到大于privot的数就停止。设我们接下来需要对小堆进行排序,对小堆进行排序的话也就是当前的右下标指向的值不能超过privot,我们就可以让右下表指向right-1的位置,然后再把L和right-1再传给这个函数它继续对剩下的值进行排序,当最后只有一个数的时候我们认为它就是有序的。交换之后的数组就变成了左边全是小于privot的数,右边全是大于privot的数。

2022-11-01 16:47:05 4339 8

原创 你知道浮点数和整形在内存中存储的差异吗

我们拿0.5来计算。就是说一个数9.0在内存中存储的是1001.0,M表示有效数字在科学计数法中表示的就是1.0010,E表示的就是1001.0移动了三位表示的就是2^3,最后表达出来的形式就是(-1)^S * 1.0010 * 2^3,得到这个结果我们就可以确定出S==0,M==1.0010,E==3。我们说把一个整形的变量n的地址放在一个float类型的指针里面,然后打印出来,可能我们第一时间想到的就是第一个打印的值是9,第二个就是9.000000,第三个打印的是9,第四个打印的是9.000000。

2022-10-16 11:32:16 278 1

原创 (c语言)详解单链表

一个元素都没有的话很好做,只需要对链表进行判断,如果为NULL我们就直接结束,如果有一个元素,我们也可以判断,如果这个元素指向下一个结点的指针为空我们就直接直接把这个结点free掉,如果有多个元素,我们就可以在定义一个指针,然后去遍历这个链表,当没有找到最后一个为空指针的时候就把重新定义的指针也往后跳,当找到了就直接free掉,然后把我们定义的这个指针置为空就好了。随机删除同样,我们需要找到被删除元素的位置,然后让另一个元素指向被删除元素的下一个位置,然后让原来的结点去指向被删除的下一个结点就可以了。...

2022-08-27 11:03:37 1904

原创 顺序表(动态内存实现增删查改)

在学习数据结构中不少人第一次遇到的就是顺序表,那么什么是顺序表呢。顺序表的底层其实就是数组,只不过他比数组更加灵活,可以自由的增加长度和删减长度,试想一下,如果我们需要创建一个通讯录,如果只用数组的话,每一次里面的人员表满了之后我们就要去改一次数组的大小,会非常的麻烦,顺序表就很好的结局了这样一个问题。那么其实cpu每一次去访问内存的时候不是一次只拿一个数据,而是有一个预加载,每一次都是拿一段,其他不用的数据就放在了缓冲区,那么下一次区找另一个数的时候就不需要再去内存里面拿而是直接去缓冲区里面。...

2022-08-18 13:40:00 211

原创 c语言实现通讯录(详解)

通讯录的信息有了,接下来我们就需要的告诉用户使用我们通讯录的时候是怎样操作的,我们这里给上一个menu的菜单莱提示用户怎样进行操作,然后就是根据菜单的提升输入内容,然后我们就可以根据用户输入的内容来实现我们对应的功能。接下来我们要确定通过什么方式来找到结构体中对应的这个元素,假如我们就用名字的方法来删除所对应的元素,我们可以定义一个name变量,然后通过遍历这个结构体来找,如果找到了我们就把后面的数依次往前拿,如果遍历完都没有找到这个名字,那么就说明这个联系人不存在我们的通讯录。...

2022-08-10 14:20:29 8641 4

原创 每个数都出现两次,找出值出现一个的那个数(找出单身狗)

其他数相同位上的数必然都是一样的,这里在把这两个异或掉剩下的就是x1,和x2这两个数。给定一个数组,里面的数都出现过两次,找出只出现了一次的那个数,如果只是单纯的计算的会很多偏移都知道,直接双重for循环那每一个数和数组中其他数作比较,如果找到了那么count++,如果count等于1的话那就说明这个数就是只出现一次的那个数。然后我们再去遍历数组用数组中的每一个元素去与上一个m,如果得到的结果是1就把它在和x1进行异或,如果不为1就把他和x2去进行异或,最后相同的数都被异或掉了,剩下的数就是x1和x2。..

2022-08-05 15:22:00 234

原创 深度了解什么是结构体对齐

这里就要讲到我们的最后一条结构体的总大小为最大对齐数的倍数,这里我们知道int类型是最大的类型,那么就要是4的倍数也就是12。然后我再来看第二个整形成员变量,第二个成员变量讲到的是要对齐到该成员的整数倍的地址处,c是1的整数被一直往下到4的整整数倍的时候也就是在内存中的这个位置。要知道结构体在内存中是怎样存储的首先我们要知道一个概念,那就是内存对齐,那么具体是怎样存储的,我把他分为以下三个点。相信很多朋友在计算结构体的时候计算出来的值和实际运算出来的是不一样的就比如这样一个结构体。2:结构体存储的形式。..

2022-08-04 12:53:37 277

原创 如何自己创建一个qsort函数

想必大家在学习的过程中也遇见过各种各样的排序,第一次接触的就是把一个数组从高或低反向排序,但是也只是涉及到了整形的排序,那么如果我们需要排序的是浮点型或者结构体呢,这个时候就是sqrt函数就能很好的帮助我们,我们苦于通过词典查看qsort的几个参数分别是(void *base, size_t num, size_t width, int (__cdecl *compare )(const void *elem1, const void *elem2)第一个base代表的是元素的起始地址,第二个是整个元素的长

2022-07-11 10:47:42 429

原创 数组和变量在内存中的存放

本章讲和大家浅谈一下数组在内存中存储的形式以及看你会造成的问题。

2022-05-27 18:25:28 590

原创 进制之间如何更高效转换

1:二进制十进制之间的转换在我们学习c计算机中少不了什么这样的二进制转十进制,十进制转二进制,可是在转换的时候我们所学到的就是把这个十进制转换成二进制是这个数字乘以10的几次方,那个数字乘以2的几次方,今天我们在这里就学锡一个更加高效率的转换方法。2:转换的方法我们首先知道十进制都是由0到9的数字组成,二进制是由0和1组成。我们如何求一个数的二进制呢,我们可以类比十进制。10的0次方表示各位,10的1次方表示十位,二次方表示百位那么类比二进制,第一个为就是2的零次方是1,2的1次方是2.

2022-05-14 09:03:29 564

原创 你真的了解野指针吗

1:什么是野指针在C语言中不少人都是被指针这一块给难倒了,今天我们就来讲讲什么是指针里面的野指针,避免今后在书写代码的时候出现致命的错误。2:容易造成野指针的几处一:当我们创建一个指针变量的时候,如果不给他附一个初值,那么它里面放的便是一个随机值,假想一下。如果我们后续用到这个指针,需要把一个值放进去,那它就是随便找的一个地址把值放进去的,这种写法是非常有问题的。二:当我们书写一个这样的代码的时候arr里面只有10个空间的大小,当我们一直给p++那么他就会一直直线后面一个值,当p超过

2022-05-06 15:15:44 256

原创 关于什么是c语言整形的提升

1:什么是整形的提升整形提升就是指在运算过程中所用到数据类型小于整形,在CPU中他的运算度是32个字节就会把数据提升成整形。2:如何理解整形的提升为了更加直观的理解什么是整形的提升我用一个题来举例说明。设一个char类型的变量a赋值为3,b赋值为127和c的值是a+b。最后用十进制打印出c的值。在这里就会用到整形的提升。我们说3是一个整形,正数在内存中的存储原码及补码那就是00000000000000000000000000000011,但是a是一个char类型的数据这个时候就会 产生.

2022-04-26 18:16:44 1088 7

空空如也

空空如也

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

TA关注的人

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