自定义博客皮肤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++之继承

继承1、继承的概念和定义继承的概念继承定义访问限定符和继承方式1、继承的概念和定义继承的概念继承的机制是面向对象程序设计时,可以使代码复用的最重要的手段。继承可以在保持原有类特性的基础上进行扩展,产生新的类,称作派生类。继承表现了面向对象程序设计的层次结构。//父类class Person{public: void Print() { cout << "name:" << _name << endl; cout << "age:" &

2021-12-06 22:50:30 946 1

原创 C++模板进阶

模板进阶非类型模板参数模板的特化在前面的博客中,详细介绍了模板的概念以及使用。模板分为函数模板和类模板,是代码复用的一种手段,是泛型编程的基础。在这篇博客中,会介绍模板进阶的一些操作。非类型模板参数前面的模板介绍中,只介绍了类型形参,是跟在class或者typename后的参数类型名称。模板还支持另一类非类型形参,就是用用一个常量作为类(函数)模板的一个参数,在类(函数)模板中可将该参数当成常量来使用。template <class T, size_t N = 10>class a

2021-11-01 22:02:42 200

原创 list的模拟实现

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

2021-10-26 21:35:19 266

原创 C++之STL——list类

STL——list类list简介list的使用list的构造函数list的迭代器list的capacitylist的元素提取list的插入和删除list简介1、list的插入和删除的时间复杂度是在常数范围内的序列式容器,并且由于list的底层是用双链表实现的,该容器支持双向迭代。2、与其他序列式容器相比(array,vector,deque),list在任意位置进行插入和删除的效率更高。3、list最大的缺陷就是不支持任意位置的随机访问。list的使用list的构造函数构造函数接口

2021-10-10 11:53:53 741

原创 vector的模拟实现

vector的模拟实现迭代器构造函数无参构造函数带长度和初始化值的构造函数使用迭代器的构造函数在上一篇的博客中,我详细介绍了vector的使用,为了能够更好的使用vector,还需要仔细了解它的底层原理。vector内部的成员有三个:成员标志_start表示已用空间的起始位置_finish表示已用空间的终止位置_end_of_storage表示可用空间的终止位置迭代器vector在存储方式上与数组是一样的,都是使用连续空间进行存储的,与数组不同的是它是动态

2021-10-03 22:09:46 134

原创 C++之STL——vector类

vector类1、vector简介2、vector的使用2.1 vector的定义2.2 vector的迭代器(iterator)的使用1、vector简介vector是表示可变大小数组的序列容器。vector采用的是连续存储空间来存储元素的,可以像数组一样通过下标来对vector的元素来进行访问,非常高效;但是和数组不同的是,vector的大小是可以动态变化的,可以随着元素的增加容器会自动进行扩容处理。2、vector的使用2.1 vector的定义首先我们来看一下使用vector的时候,都可以

2021-09-13 23:02:52 235

原创 string类的模拟实现

string类的模式实现浅拷贝和深拷贝浅拷贝深拷贝string类的模拟实现构造函数拷贝构造函数在上一篇的博客中,详细讲解了string类的常见用法,这篇着重讲一下string类常用的接口是如何实现的。在开始正文之前,首先要介绍一下深浅拷贝。浅拷贝和深拷贝浅拷贝假设我们自己写一个string类,其中只有构造函数和析构函数,拷贝构造函数用系统默认的来代替。 class my_string { public: my_string(const char* str) :_str(new ch

2021-08-12 10:11:49 426

原创 Linux(一) —— 基本指令

Linux——基本指令1、ls指令1、ls指令ls指令的功能有两个:一是对于目录,列出该目录下的所有子目录与文件。二是对于文件,列出文件名以及其他信息。用法:ls [选项] [目录或文件]如果不加选项,直接输入ls,就会直接显示该目录下的目录和文件。输入的时候在ls指令中,不同的选项具有的功能是不一样的,常用选项如下:...

2021-08-09 09:47:41 534

原创 C++之STL——string类

string类概念string类的常用接口1、string类对象的常见构造类型概念string类是C++中表示字符串的结构,可以将其认为是C语言的字符串与其相关的函数封装在一起实现的类。避免了用户自己管理底层空间以及越界访问。string类的常用接口1、string类对象的常见构造类型int main(){ string s1; string s2("hello world!"); string s3(10, 'x'); string s4(s2); return 0;}.

2021-07-27 09:29:56 358

原创 C++之初识模板

初识模板泛型模板函数模板1、函数模板格式泛型了解C++的人都知道,在C++中有函数重载,可以通过函数重载来实现相同功能,不同类型的函数。比如说下面的交换函数void Swap(int& a, int& b){ int tmp = a; a = b; b = tmp;}void Swap(double& a, double& b){ double tmp = a; a = b; b = tmp;}void Swap(char& a,

2021-06-22 11:38:58 148

原创 C++内存管理

C++内存管理C/C++内存的分布方式C语言的动态内存管理方式malloc/calloc/realloc/freeC++内存管理方式C/C++内存的分布方式C/C++中,我们经常用到的内存就是上面的四个。栈:也叫堆栈,用来存储非静态局部变量、函数的参数、返回值等等,具有向下增长的特点,也就是存储的地址是由上至下是从低到高。堆:用于程序运行时的动态分配,用于分配在程序中需要开辟的空间。堆具有向上增长的特特点。数据段:也可以叫做静态区,用来存储全局变量和静态数据。代码段:用于存储执行的代码和字面常

2021-06-17 17:32:48 332 7

原创 类与对象(下)

类与对象 下构造函数新理解构造函数函数体赋值初始化列表explicit关键字static成员构造函数新理解构造函数函数体赋值根据前面讲的构造函数,在创建对象的时候,编译器可以通过调用构造函数,通过函数内的语句给对象中的各个成员变量一个合适的初始值。class Date{public: Date(int year, int month, int day) { _year = year; _month = month; _day = day; }private: int _ye

2021-06-15 09:32:44 94

原创 数据结构之排序

排序排序的概念排序的概念在进行各种排序之前,要先介绍一下排序的一些概念:排序:指的是将一串记录,按照其中的某个或者某些关键字的大小,进行递增或者递减的排列。稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的。内部排序:数据元素全部放在内存中的排序。外部排序:数据元素太多不能同时放在内存中,根据排

2021-06-14 17:15:49 155 2

原创 数据结构之二叉树

二叉树及其实现树的概念树的定义关于树的一些小概念树的表示树的概念在介绍二叉树之前,我们首先了解一下关于树的知识。树的定义树:树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。树的一些特性:(1) 有一个特殊的结点,称为根结点,根节点没有前驱结点。(2) 除根节点外,其余结点被分成M(M>0)个互不相交的集合T1、T2、……、Tm,其中每一个集合Ti(1<= i<=

2021-06-04 09:41:43 198

原创 类和对象(中)

类与对象 中1、类的6个默认成员函数2、构造函数2.1 概念2.2 特性1、类的6个默认成员函数在C++中,空类其实并不是什么都没有,它里面会自动生成6个默认成员函数。2、构造函数2.1 概念我们在定义一个类之后,用类创建一个对象,需要将对象进行初始化。比如下面的日期类:class Date{public: void Display() { cout << "this -> d1" << this << endl; cout <&

2021-06-02 09:49:57 129

原创 类和对象(上)

类和对象 上1、面向过程和面向对象2、类的引入3、类的定义类的两种定义方式4、类的访问限定符和封装访问限定符1、面向过程和面向对象在C语言中,我们所学的都是面向过程的,更加关注的是代码执行的过程,分析解决问题的步骤,通过函数调用来逐步解决问题。在C++中,我们基于的是面向对象,将一件事情拆分成不同的对象,靠对象之间的交互来完成。这两个我们可以这样理解:我们平常都会点外卖,那么外卖中的关系在面向过程和面向对象是不同的。面向过程:下单、接单、送餐三个过程面向对象:客户、商家、骑手三者的关系也就

2021-05-27 09:49:03 101

原创 C++入门基础

@TOC1、C++关键字C++一共有63个关键字,这其中也包括有一些C语言的关键字,比如:if、for、int、long等等,C++和C语言很多地方是密切相关的。这里只是对关键字有一个了解,具体的用法在后面会深入的学习。2、命名空间在C语言中,我们在写代码的时候总是会遇到一些命名冲突的问题,比如说如下代码:从图中我们可以看出,如果我们想使用scanf作为变量名,那么在输入的时候编译器就会报错,这是因为编译器在编译的时候采用的就近原则,它会认为scanf是一个变量而不是输入函数,导致编译的时候出

2021-05-23 19:03:42 139

原创 堆的实现

堆的实现二叉树二叉树的概念堆的概念在介绍堆之前,我们要先简单介绍一下二叉树,因为堆的结构就是一个二叉树。详细的二叉树我会在下一篇博客中给大家讲解。二叉树二叉树的概念一棵二叉树是结点的一个有限集合,该集合或者为空,或者是由一个根节点加上两棵别称为左子树和右子树的二叉树组成。二叉树就像下图中的树倒过来的样子。而数据结构中的二叉树如下图,可以是空树、可以是只有一个根节点、可以是只有一棵子树、也可以是有两棵子树,只要节点个数小于2即可在二叉树中,还有两个很特殊的二叉树:满二叉树:一个二叉树,如果每

2021-05-16 20:18:12 104

原创 栈和队列

栈和队列(一) 栈1.栈的概念及结构2.栈的实现(二) 队列1.队列的概念及结构2.队列的实现(一) 栈1.栈的概念及结构栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。出栈:栈的删除操作叫做出栈。出数据也在栈顶。2.栈的实现栈的实现可以用数组实现也可以用链表实现,但是相对而言数组的结构更

2021-05-05 10:18:58 73

原创 数据结构之线性表(二)——单向链表

单向链表链表的概念单向链表的实现动态申请节点单链表的打印单向链表的尾插链表的概念链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的 。如图所示,链表与顺序表不同的地方在于,链表的存储并不是在一块连续的空间中,而是通过动态分配的一个个内存块链接起来进行存储的。图中的指针就是用来存储下一个内存块的地址,通常用next表示。链表的结构在逻辑上看起来是一个接一个连接起来的,但是在内存中,却是散乱排布的,只能通过指针定位。下面我会详细说明链表是如何实现的:

2021-04-20 18:27:25 102

原创 链表经典题目:判断链表中是否存在环(二)

在前些日子的博客中,我写了链表是否有环的一道题,而今天的这道题是上一道题的升级版,不仅要确定是否有环,还需要找到环的入口点。题目如下所示:比如用上面的链表举例,我们要确定链表中存在环已经不是难题了,但是怎样才能确定这个环是从哪里开始的呢?下面我通过形象一点的图示来为大家解释:图中是比较形象的一个环,假设从头开始到入环口的距离是L,从入环口到相遇点的距离是X,环的周长为C。如果链表中存在环的话,那么快指针和慢指针在环内一定会相遇,这是我在前面的博客中证明过的。要找到环的入口点,首先要找到两个指

2021-04-14 20:39:42 64

原创 数据结构之线性表(一)——顺序表

顺序表顺序表的概念顺序表的功能实现1. 顺序表的初始化在开始正题之前,首先介绍一下什么是线性表。线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串等等。线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。顺序表的概念顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数

2021-04-13 20:25:32 376

原创 超详解------一个程序从编译到链接的全过程

程序处理的全过程翻译环境预编译阶段在ANSI C标准下的一个程序中,分为两种环境,一个是翻译环境(也叫编译环境),另一个叫执行环境。翻译环境是用来将源代码转换为计算机能够识别的机器代码,执行环境是将生成的执行文件实际执行的环境。翻译环境在一个完整的工程中,可能会有多个源文件和多个头文件,那么编译器在编译的过程中是怎样进行处理的呢?首先,编译器会将每个源文件进行单独的编译,生成目标文件。其次会检查每个源文件中是否引用了头文件,这些头文件是自己添加的还是引用的库头文件,这些头文件会形成一个链接库,链接器

2021-04-03 17:20:00 501

原创 C语言中的文件操作详解

文件操作详解文件类型文件缓冲区文件指针文件的打开和关闭在我们的计算机中,会存有各种各样的文件,有着各种各样的类型。但是在程序设计中,一般涉及到两种文件:程序文件和数据文件。程序文件指的是在程序运行后生成的一系列文件:比如源文件(后缀为.c),目标文件(windows环境下后缀为.obj),可执行文件(Windows环境下后缀为.exe)。数据文件是指程序读写时的数据,也就是程序运行过程中存储或者读取的文件。今天我们所讨论的文件操作指的是关于数据文件的操作。文件类型数据文件主要分为文本文件和二进制

2021-03-22 20:44:04 304

原创 摩尔投票法

大家在学数组的阶段中,如果在Leetcode上做过关于数组的题,一定会碰到一道比较经典的数组题,就是在数组中找主要元素。题目具体如下:这道题如果在不要求时间复杂度的情况下,我们可以很轻易的想到第一种解法,就是用两个指针,一个指向当前元素,另一个指针去遍历剩下的元素,看有没有与当前值相同的元素,记录下来个数。int majorityElement(int* nums, int numsSize){ int cur = 0; int next = 0; int max = 0; int num =

2021-03-20 22:55:53 98

原创 动态内存管理

动态内存动态内存函数malloc()函数calloc()函数realloc()函数在学习动态内存之前,我们开辟空间的方式是通过数组或者定义变量的形式来进行的。int val = 20;//在栈空间上开辟四个字节char arr[10] = {0};//在栈空间上开辟10个字节的连续空间但是这样子开辟空间的大小都是固定的,在程序运行的时候不能改变其大小,但是并不是任何程序使用空间的大小都是已知的,有时候需要的空间大小在运行后才知道,那么这个时候就需要用到动态内存,那么如何使用动态内存来开辟空间呢,听

2021-03-17 19:48:09 151

原创 结构体谜团之结构体的内存对齐

结构体的对齐方式结构体简述结构体内存对齐的三重奏一重奏:确认成员变量的对齐数二重奏:对齐到对应类型对齐数的整数倍的地址处结构体简述结构体是C语言中非常重要的一种自定义类型,结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。比如我们想描述一个学生,C语言中自带的类型无法完成这样的定义,那么这个时候我们就需要用到结构体。可以这样定义:struct Stu{char name[20];//名字int age;//年龄char sex[5];//性别char id[20

2021-03-08 19:19:27 277

原创 链表经典题目:判断链表中是否存在环(一)

这是力扣上的一道题,题目是这样的:存在环的链表和正常的链表不同在于存在环的链表不能遍历,因为没有尾部的存在。在开始做题的时候,博主想到的方法是每经过一个节点,就将这个节点断开,判断下一个节点所指向的节点是不是指向NULL,如果存在环的话,开始成环的节点就会指向NULL。如下图所示:但是博主忽略了一点,就是如果链表中没有环的话,尾部也会存在NULL,这样子在倒数第二个节点也会出现上图的情况。如上图,在节点0的位置,0所指向的节点也指向NULL,但是链表中并没有环。这就陷入了死胡同,说明这种解法是

2021-03-03 21:05:29 142 1

原创 字符串函数(二) + 内存函数详解

strstr函数strstr函数的作用是在一个字符串中寻找一个字串。该函数的参数有两个,一个是源字符串,一个是要寻找的子串。返回值是子串的起始地址,如果没有找到则返回空指针,如果子串长度为0则返回源字符串。用法如下:下面是我实现strstr函数的两种方法,可以让大家更好的理解这个函数:代码1:char* mystrstr(const char* str1, const char* str2){ assert(str1); assert(str2); if (str2 == '\0'

2021-03-02 21:26:46 81

原创 字符串函数(一):strcpy函数、strcat函数和strcmp函数

这三个函数是字符串函数中比较经常用到的函数,放在一起解释是因为它们有一个共同点,就是操作的字符串都不限制其长度。strcpy函数在官方的解释中,strcpy函数的作用是拷贝一个字符串。该函数的参数有两个,一个是目标字符串,一个是源字符串返回值是字符指针,也就是目标字符串的地址。举个例子:int main(){ char arr1[] = "***************"; char arr2[] = "abcdef"; strcpy(arr1, arr2); printf("%s\

2021-02-08 20:26:31 1125

原创 杨氏矩阵

什么是杨氏矩阵?杨氏矩阵,是对组合表示理论和舒伯特演算很有用的工具。它提供了一种方便的方式来描述对称和一般线性群的群表示,并研究它们的性质。有一个二维数组. 数组的每行从左到右是递增的,每列从上到下是递增的。有关的算法题有这样一道题:有一个数字矩阵,矩阵的每行从左到右是递增的,矩阵从上到下是递增的,请编写程序在这样的矩阵中查找某个数字是否存在。要求:时间复杂度小于O(N);解决这道题的基本思路要根据它的规律,右边和下边的比我大,左边和上面的比我小。很多人会想如果按照这样的规律查找,那么每一次不

2021-02-03 22:45:53 200

原创 数组指针和二级指针的区别

在学习到数组指针这个地方,听到有人在讨论数组指针和二级指针有什么区别,这里我谈一下我自己的见解。首先数组指针是用来存储数组的地址的上图所示,p就是一个数组指针,但是在使用的时候发现,对p解引用并不是得到数组的首元素,而是数组首元素的地址。这个有的人就会犯疑问,如果数组指针和其他类型的指针一样,解引用应该会拿到数组首元素的值才对。为什么解引用两次才会拿到首元素的值,那这样不就和二级指针是一样的吗。但其实我认为数组指针和二级指针只是用法相同,但是本质上是不一样的。二级指针存储的是变量的地址的地址,而

2021-02-01 23:10:21 3049 6

原创 内存存储相关的一些易错题

1.对于以下代码输出结果是什么?//输出什么?#include <stdio.h>int main(){ char a= -1; signed char b=-1; unsigned char c=-1; printf("a=%d,b=%d,c=%d",a,b,c); return 0;}char类型一定是有符号的,因此第一个会输出-1。signed char 表示的是有符号的char,同样会输出-1。而最容易混淆的是unsigned char ,这是一个无符号的ch

2021-02-01 21:58:27 128 1

原创 数据在内存中的存储解析

数据在内存中的存储整形在内存中的存储大家都直到,在C语言中有很多的数据类型,基本的内置类型有char,short,int long,long long,float,double,这些内置的类型可以分为整形家族和浮点数家族。而我们常用的也就是这两种类型,这回就深度解析一下整形和浮点型在内存中的存储。整形在内存中的存储我们知道,定义一个变量在内存中是需要开辟空间对这个变量进行存储的,不同的类型所占的空间大小也不一样。那么整形数据在内存中是如何存储的呢?在详细讨论之前要先了解一个知识,就是原码、反码、补码

2021-02-01 17:18:14 209

原创 找最大公约数

最大公约数大家都比较熟悉,找最大公约数的方法也有很多,有时候也会被当作面试题来进行考察,这次给大家介绍几种常见的算法:设两个数为a和b1.辗转相除法大数放在a中,小数放在b中,t为a模上b的余数(1)首先对输入的a和b进行大小判断,确保将大数放在a中,小数放在b中(2)求a模b,其值放在t中(3)如果t为0,则b为最大公约数,也就是说a能够把b整除,因此b为最大公约数(4)如果t不等于0,则把b的值给a,t的值给b,继续第二步的操作,直到t为0。注意:这个算法的关键是a中必须放大数,b中放小

2021-01-31 21:13:28 1391 1

原创 素数判断

试除法根据效率的不同,试除法又分为几个小的类型:第一种:素数就是除了1和它本身,不能被其他数整除的数,试除法就是将除了1和其本身的数之外所有的数遍历一遍,如果有一个数能够整除,就不是素数。境界1int main(){ int i = 0; for (i = 100; i <= 200; i++) { int j = 0; for (j = 2; j < i; j++) { if (0 == i%j) break; } if (j == i)

2021-01-31 21:05:29 271

原创 C语言操作符的常见问题

操作符常见问题1.移位操作符位操作符逻辑操作符1.移位操作符移位操作符分为左移操作符和右移操作符(1)左移操作符左移操作符只有一种移位规则:左边抛弃、右边补0.(2)右移操作符右移操作符分为逻辑右移和算术右移。逻辑右移:右边丢弃,左边补0。算术右移:右边丢弃,左边用原值的符号位填充。这就是左移操作符和右移操作符的区别。在移位操作符中,最重要的一点是:不要移动负数位,这个是C语言标准中没有定义过的。那么移位操作符有什么用呢?移位操作符更多的是用在二进制的场景里,比如计算二进制中1

2021-01-28 10:21:09 330

原创 关于C语言数组一些基本问题的解释

数组中的常见问题数组的创建和初始化数组的使用数组在内存中的存储数组名的含义数组的创建和初始化1.一维数组创建和初始化(1)使用变量作为一维数组初始化的长度,也就是所谓的变长数组。变长数组是在C11标准中才开始使用的,因此不同的编译器对于变长数组有着不同的标准,也就是说,只有在C11标准的编译器下才能使用变长数组。(2)关于一维数组的初始化如果要省略数组的长度,就必须在函数的最开始对数组进行初始化,这样子编译器才会给数组一个长度。如果只是省略了数组长度,而不初始化,就无法进行编译。int arr

2021-01-27 23:17:24 584

原创 C语言玩转小游戏(2)----扫雷小游戏

扫雷小游戏概述主函数游戏函数打印函数布雷函数排雷函数运行结果总结扫雷小游戏是我们经常在电脑上玩的一个小游戏,非常的考验人的耐心和智力,这次我们用C语言将其实现一下,因为我还没有掌握关于C语言插入图片或者用鼠标点击的阶段,因此这次只是实现一个比较基础的版本,后面会继续的完善。概述在电脑上的扫雷小游戏是分难度等级的,难度越高,棋盘越大,地雷的数量也就越多,因此我也按照这样的思路,设置了不同的难度和不同的地雷数,我将三个等级分别用不同的头文件和.c文件来写的,可能有些笨拙,但是我会随着知识的不断掌握,不断的

2021-01-25 21:15:23 197

原创 用C语言玩转小游戏(一)-----三子棋

C语言虽然是最基础的语言,但是功能无比强大,用C语言可以写出很多有趣的东西,今天就给大家介绍一种三子棋小游戏,这个游戏目前还没有加复杂的算法来提高电脑的智力,只是实现了一些最基本的东西,整体是用数组来完成的,但是后期我会不断地去完善。1.设置菜单及选项界面因为是游戏的初期,菜单设置的比较简单,就是1和0,选择1玩游戏,选择0退出游戏void menu() { printf("****************************************\n"); printf("******

2021-01-24 20:58:43 263

空空如也

空空如也

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

TA关注的人

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