自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 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[]的原理。

2024-02-23 22:46:59 866 1

原创 C++类和对象(下)

3.2友元类友元类的所有成员函数都可以是另一个类的友元函数,都可以访问另一个类中的非公有成员。

2024-02-21 09:58:28 946

原创 C++类和对象(中)

3.析构函数3.1概念通过前面构造函数的学习,我们知道一个对象是怎么来的,那一个对象又是怎么没呢的?

2024-02-14 20:36:09 846

原创 C++引用(内含和指针的对比)

引用实质是“取别名”,所以我们在取别名之前要先有一个名字(变量),可以看到,先定义接下来再初始化会直接报错(语法问题)

2024-02-11 22:10:42 942

原创 C++类和对象(上)

3.类的定义3.1类的定义方法// 类体:由成员函数和成员变量组成// 一定要注意后面的分号class为定义类的关键字,ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的方法或者成员函数类的两种定义方式:1.声明和定义全部放在类体中,需注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理。

2024-02-09 23:14:16 866

原创 C++的缺省参数和函数重载

缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参。拿上面代码为例,形参a就是缺省参数,当我们给他传参时,a就是我们给的值,如果我们没有传参,它就是默认a为0。函数重载:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这。半缺省给参数传值的时候,缺省的地方可以不给值,但是没有缺省的地方不给值就会报错。全缺省给参数传值的时候可以全传也可以部分传,可以看上面代码传参的写法。(参数个数 或 类型 或 类型顺序)

2024-02-06 21:41:01 419

原创 命名空间细节讲解

int x = 1;int x = 0;我们这里可以用namespace关键字给两个x分别封装起来然后起不同的域名,x还是全局变量不会改变,但是我们打印的时候不能直接打印x,而是要在域作用限定符前面加上域名,指定我们去哪个域里面去找x(编译器默认会在当前局部域搜索,找不到再去全局域找,上面我们指定了就会直接去指定域搜索)注:命名空间域的域名可以相同,但是有一点要注意,名字相同的域里面不能定义同名变量,会有重定义的问题。

2024-02-06 19:37:44 1106

原创 七大排序动态图

快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法,其基本思想为:任取待排序元素序列中的某元素作为基准值,按照该排序码将待排序集合分割成两子序列,左子序列中所有元素均小于基准值,右子序列中所有元素均大于基准值,然后最左右子序列重复该过程,直到所有元素都排列在相应位置上为止。的排序码顺序进行比较,找到插入位置即将array[i]插入,原来位置上的元素顺序后移。把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列。

2023-12-11 14:06:04 388

原创 二叉树前序、中序以及后序遍历(递归展开图)

函数的实现很简单(因为前、中、后序的遍历函数可以说没有什么改变,只是顺序不一样),但是光看函数实现肯定不好理解,所以我们重点就在递归展开图,大家写递归的时候就可以画画图,可以更好理解(因为递归是一层一层的)我们创建一个树的结构体,然后实现开辟节点的函数,下面就要链接了(再写一个链接函数,这个函数调用开辟节点函数),开辟好之后就把各自链接起来,大家可以随意链接,我先给大家看看我的树,好方便后面观察递归展开图。大概就是递归进去,然后return或者结束返回,因为递归就是一层一层的。左子树 右子树 根。

2023-11-28 01:52:27 971

原创 Linux指令

more 目录:就可以看到很多文件,但是我们创建的是50个,现在只显示了26了,因为当它占满一屏的时候,就会自动停下来,然后让用户用回车下翻,逐行阅读(但是我们不推荐这个,因为用上下键不能上下翻,只能回车键下翻,下面看下面的less指令)rm -rf 文件/目录:删除目录或文件夹(-r是递归删除,因为目录里面有东西就是一层接着一层,-f是强制的意思,因为我们删除文件的时候,系统可能会提醒我们确不确定删除,-f就是强制删除)Linux系统中,磁盘上的文件和目录被组成一棵目录树,每个节点都是目录或文件。

2023-11-26 00:43:59 1111

原创 栈和队列

队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out) 入队列:进行插入操作的一端称为队尾 出队列:进行删除操作的一端称为队头。队列也可以数组和链表的结构实现,使用链表的结构实现更优一些,因为如果使用数组的结构,出队列在数组头上出数据,效率会比较低。栈的实现一般可以使用数组或者链表实现,相对而言数组的结构实现更优一些。栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。压栈:栈的插入操作叫做进栈/压栈/入栈,

2023-11-20 16:48:10 80

原创 顺序表和链表

3. 增容一般是呈2倍的增长,势必会有一定的空间浪费。线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存。概念:链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表。我们再继续插入了5个数据,后面没有数据插入了,那么就浪费了95个数据空间。用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串...来很多优势,实现反而简单了,后面我们代码实现了就知道了。

2023-11-14 19:09:05 172

原创 写一个宏,可以将一个整数的二进制位的奇数位和偶数位交换

我们知道,16进制0x55555555转换为二进制就是0x01010101010101010101010101010101。我们可以想想怎么保留偶数上的位?我们可以利用0x55555555按位与上这个数就保留了偶数。我们知道,二进制每一位,如果这个位是0,按位与1还是0,如果这个数是1,按位与1就是1。奇数位一样的保留方法,我们可以利用0xaaaaaaaa按位与上这个数保留奇数。然后我们把计算的结果<<1,这样偶数上的位就在奇数位上了。我们把结果>>1,这样奇数位就在偶数位上了。

2023-10-14 16:02:43 271

原创 写一个宏,计算结构体中某变量相对于首地址的偏移,并给出说明

因为是求偏移量,所以我们假设结构体的初始地址为0,然后强转成结构体指针类型,然后->找到成员,&取出成员的地址,然后强转成size_t类型,这样就取得了偏移量。

2023-10-14 15:28:43 295

原创 C语言文件操作

磁盘上的文件是文件。但是在程序设计中,我们一般谈的文件有两种:程序文件、数据文件(从文件功能的角度来分类的)。

2023-10-11 22:46:10 254

原创 自定义类型

有了结构体,那如何定义变量,其实很简单int x;int y;}p1;//声明类型的同时定义变量p1//定义结构体变量p2//初始化:定义变量的同时赋初值struct Stu//类型声明//名字int age;//年龄//初始化int data;//结构体嵌套初始化位段的声明和结构体是类似的,有两个不同:1.位段的成员必须是int、unsigned int或signed int。2.位段的成员名后边有一个冒号和一个数字。

2023-09-25 23:37:22 147

原创 猜凶手

日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。已知3个人说了真话,1个人说的是假话。

2023-09-10 17:41:54 67

原创 杨氏矩阵

5:当我们要找的数比5大时,这一行肯定没有比5大的,所以我们就要让行+1,当我们要找的数比5小时,肯定在这一行里面,所以我们让列-1。我们来分析一下:我们可以找特殊点,比如 5 或者 11。11是一行里面最小的,一列里面最大的。5是一行里面最大的,一列里面最小的。

2023-09-09 22:52:01 85

原创 数据在内存中的存储

前面我们已经学习了基本的内置类型:以及他们所占存储空间的大小1.使用这个类型开辟内存空间的大小(大小决定了使用范围)2.如何看待内存空间的视角大端(存储)模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中;小端(存储)模式,是指数据的低位保存在内存的低地址中,而数据的高位,保存在内存的高地址中。为什么会有大小端模式之分呢?这是因为在计算机系统中,我们以字节为单位的,每个地址单元都对应着一个字节,一个字节为8bit。

2023-08-07 00:47:26 179

原创 C语言数组(详解)

下标引用操作符。

2023-07-28 00:13:40 472 2

原创 C语言实现扫雷

大家可以看,假如我们点到9*9的位置了,难道要先判断越没越界,然后再看周围有几个雷吗?那样效率太低了,所以我们直接创建11*11的棋盘,但是我们还是用中间9*9的棋盘。我们9*9的棋盘为什么要创建11*11的棋盘呢?game.h文件不变,还是声明函数。game.c函数实现。

2023-07-27 14:32:55 165 3

原创 C语言实现三子棋

game.h里面的内容是这样的,可以定义两个宏ROW和COL,我们后期要改变棋盘的大小只用改变这一个地方就好了。下面是打印菜单,然后是游戏的进入和退出,1是进入游戏,0是退出游戏,选择其他就会选择错误。现在轮到电脑下棋了,电脑我们先用最简单的,就是随机找地方下,哪里没有下过就下在哪里。game函数里面放一个while(1)循环。现在我们就要来实现游戏的内容了。game.c游戏函数的实现。game函数还是一样。现在我们来看代码实现。下面是整体的代码实现。

2023-07-26 15:57:15 81 15

原创 C语言函数(详解)

如果库函数能干所有的事情,那还要程序员干什么?所以更加重要的是自定义函数。自定义函数和库函数一样,有函数名,返回值类型和函数参数。但是不一样的是这些都是我们自己来设计。这给程序员一个很大的发挥空间。函数的组成:ret_typefun_namepara1statement;//语句项ret_type 返回类型fun_name 函数名para1 函数参数我给大家举个例子就能明白了(写一个函数找出两个数中的最大值)

2023-07-25 13:46:15 625 10

原创 分支和循环(2)

我们通过上面代码可以看到,不管表达式是真是假,这个循环语句都会被执行一次,由此可以看出do while语句的特点,就是循环至少执行一次,使用场景有限,所以不是经常使用。答案是1,2,3,4,然后死循环,因为continue跳过了后面的代码,直接跳到了判断部分,i 没有改变,所以 i 一直是5然后一直死循环。从理论上goto语句是没有必要的,实践中没有goto语句也可以很容易写出代码,但是某种场合还是用的到的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过程。+......+10!

2023-07-20 21:54:29 58 2

原创 分支和循环(1)

3.控制语句。

2023-07-20 00:45:06 154 3

原创 初识C语言(5)

十四、指针十五、结构体十四、指针指针是我们C语言中最重要的知识点,大家听不懂没关系,因为我们现在只是初识,到后面才深入探究,大家不要害怕指针,其实有时候就是我们心里作用:可能感觉太难了呀,学不会,感觉很复杂。事实上没有这么复杂。

2023-07-03 00:58:21 186 1

原创 初识C语言(4)

我们现在先不管 unsigned int 什么意思,假如我们感觉第一句的这个类型定义太长了,有点麻烦,那我们现在可以怎么办呢,我们可以在主函数上面用 typedef 给 unsigned int 改个名字,我们把他改成uint,现在第一句代码和第二句代码是一模一样的道理。这就是我们的 typedef,他可以把那些稍微复杂的类型进行相关的简化。

2023-06-21 22:12:56 82

原创 初识C语言(3)

我们要怎样定义数组呢?变量名或者想存放多少个数据都可以。下面这段代码默认数组里面是0。定义数组的时候也可以往里面放值。假如arr1我想放5个元素,直接给了5个,然后我又定义了一个arr2,这次我想放30个元素,但是实际只放了10个,这样可不可以呢?可以。这种叫不完全初始化。我们可以看下面的监视窗口,arr2里面我们没初始化的元素默认为0。

2023-06-15 21:27:03 78 1

原创 初识C语言(2)

但是当我们打印出来之后,就不一样了,我们可以看上图的监视窗口,arr1 后面有一个 \0 ,但是arr2 后面没有 \0,这就是为什么我们打印出来的内容不一样了,就是因为 arr2 后面没有 \0 ,打印字符串要碰到 \0 才能结束,所以打印函数就会一直往后打印,直到碰到一个随机的\0。(常属性的意思,可以修饰变量)修饰的常变量的意思就是如果在变量的(上面代码的 int a)前面加个const,这个a里面放的本来是10,第一个打印没问题,但如果把a改成100的话,它就会报错。

2023-06-14 00:48:03 74

原创 牛客网题目大小写转换

我们要先知道getchar的工作原理,我们要接收一个字符,是不是要从键盘敲一个字符,那我们getchar工作的时候是直接从键盘去拿数据的吗,当然不是,getchar和键盘直接还有一个输入缓冲区,我们在运行代码的时候不输入数据的时候是不是有个光标在一直闪,因为getchar在看输入缓冲区中有没有数据,因为输入缓冲区里面没有数据,所以他就在一直闪,他在等我们从键盘上输入点东西,我们现在开始敲了,假如我们敲了一个大写A,他有送给getchar吗?我们实现了输入和打印,那么问题来了,大小写怎么转换呢?

2023-06-11 14:49:40 121

原创 初识C语言

(1)语言简洁、紧凑,使用方便、灵活 (2)运算符丰富,C语言的运算符包含的范围很广泛(3)数据类型丰富(4)具有结构化的控制语句(5)语法限制不太严格,程序设计自由度大(6)语法限制不太严格,程序设计自由度大(7)生成目标代码质量高,程序执行效率高。已知的计算机语言有上千种,C语言只是其中的一种,我们用C语言写出程序,其实就是人写出程序来告诉计算机怎么工作,就是人和计算机交流的一个媒介(工具),那么C语言是什么?double占8个字节。生活中的有些值是不变的(比如:圆周率,性别,身份证号码,血型等等)

2023-06-10 16:59:10 120 2

空空如也

空空如也

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

TA关注的人

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