自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

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

我们接着C++类和对象没讲完的接着讲完。

2024-05-15 20:50:32 746

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

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

2024-05-15 08:57:34 973

原创 C++入门(下)

在早期C/C++中auto的含义是:使用auto修饰的变量,是具有自动存储器的局部变量,但遗憾的是一直没有人去使用它,大家可思考下为什么?C++11中,标准委员会赋予了auto全新的含义即:auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得。return 10;auto b = a;//auto e;无法通过编译,使用auto定义变量时必须对其进行初始化。

2024-05-12 20:56:14 597

原创 C++入门(上)

定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。// bit是命名空间的名字,一般开发中是用项目名字做命名空间名。// 我们上课用的是bit,大家下去以后自己练习用自己名字缩写即可,如张三:zs// 1. 正常的命名空间定义// 命名空间中可以定义变量/函数/类型int val;//2. 命名空间可以嵌套int a;int b;int c;int d;

2024-05-08 20:20:00 1223 1

原创 C语言实战项目---通讯录

项目要实现的内容:能够存放100个人的通讯录程序,能够实现联系人数据的存储,删除,修改,查找,展示联系人的信息。所需知识:结构体,指针,函数.................废话不多说,咱们直接开始。

2024-05-07 15:25:34 562

原创 数据结构(五)单链表专题

在开始之前,我先来给大家讲一下顺序表与链表的区别:它们在堆上存储的差异:我们可以很容易的知道,循序表是连续的有序的,但链表是杂乱的,它们通过地址彼此联系起来。

2024-03-26 19:19:08 940 1

原创 数据结构(四)顺序表与链表的深层次讲解

数据结构是由“数据”和“结构”两词组合⽽来。什么是数据?常⻅的数值1、2、3、4.....、教务系统⾥保存的⽤⼾信息(姓名、性别、年龄、学历等等)、⽹⻚⾥⾁眼可以看到的信息(⽂字、图⽚、视频等等),这些都是数据什么是结构?当我们想要使⽤⼤量使⽤同⼀类型的数据时,通过⼿动定义⼤量的独⽴的变量对于程序来说,可读性⾮常差,我们可以借助数组这样的数据结构将⼤量的数据组织在⼀起,结构也可以理解为组织数据的⽅式。想要找到草原上名叫“咩咩”的⽺很难,但是从⽺圈⾥找到1号⽺就很简单,⽺圈这样的结构有效将。

2024-03-25 09:10:02 1925

原创 数据结构(三)复杂度的深层次剖析

之前发布了数据结构(一),很多同学反响不够清晰,那今天就发一篇对复杂度专题的博客,希望对大家理解复杂度提供一些帮助。

2024-03-19 15:37:05 733

原创 C语言 实用调试技巧

第一次被发现的导致计算机错误的飞蛾,也是第一个计算机程序错误。注:参考资料Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。从上述我们不难观察出debug和release它们的大小差异很大(debug 61KB release 11KB)那这是为什么呢?这是因为debug包含了调试等其他的一系列的过程所以大小会更大。

2024-03-18 17:16:45 989

原创 数据结构(二)顺序表和链表

线性表(linear list)是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串...线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。

2024-03-15 20:08:42 1866 1

原创 数据结构(一) 复杂度讲解

数据结构(Data Structure)是计算机存储、组织数据的方式,指相互之间存在一种或多种特定关系的数据元素的集合。算法(Algorithm):就是定义良好的计算过程,他取一个或一组的值为输入,并产生出一个或一组值作为输出。简单来说算法就是一系列的计算步骤,用来将输入数据转化成输出结果。

2024-03-14 20:01:29 602

原创 C语言实战项目---贪吃蛇(下)

C语言实战项目,是我作为C语言结尾的一个项目。内容很多,有些也不好理解。但是大家不用担心,后续我会持续更新具体代码的讲解。我们接着上次的内容继续(C语言实战项目---贪吃蛇(上)),这次是C语言的最后一篇博客,明天我就正式开始更新数据结构了。想继续学习的同学和志同道合的人不要错过。

2024-03-14 10:38:20 1211

原创 C语言实战项目---贪吃蛇(上)

贪吃蛇是久负盛名的游戏,它也和俄罗斯⽅块,扫雷等游戏位列经典游戏的⾏列。在编程语⾔的教学中,我们以贪吃蛇为例,从设计到代码实现来提升学⽣的编程能⼒和逻辑能⼒。使⽤C语⾔在Windows环境的控制台中模拟实现经典⼩游戏贪吃蛇实现基本的功能:• 贪吃蛇地图绘制• 蛇吃⻝物的功能?(上、下、左、右⽅向键控制蛇的动作)• 蛇撞墙死亡• 蛇撞⾃⾝死亡• 计算得分• 蛇⾝加速、减速• 暂停游戏• 提⾼学⽣对编程的兴趣• 对C语⾔语法做⼀个基本的巩固。• 对游戏开发有兴趣的同学做⼀个启发。• 项⽬

2024-03-13 10:17:49 1008

原创 C语言 编译和链接

在ANSI?C的任何⼀种实现中,存在两个不同的环境。第1种是翻译环境,在这个环境中源代码被转换为可执⾏的机器指令。第2种是执⾏环境,它⽤于实际执⾏代码。

2024-03-12 10:41:40 1006 1

原创 C语言⽂件操作

磁盘上的⽂件是⽂件。但是在程序设计中,我们⼀般谈的⽂件有两种:程序⽂件、数据⽂件(从⽂件功能的⻆度来分类的)。上⾯说的适⽤于所有输⼊流⼀般指适⽤于标准输⼊流和其他输⼊流(如⽂件输⼊流);所有输出流⼀般指适⽤于标准输出流和其他输出流(如⽂件输出流)。

2024-03-11 19:42:07 729

原创 C语言动态内存管理经典笔试题

C/C++程序内存分配的⼏个区域:1. 栈区(stack):在执⾏函数时,函数内局部变量的存储单元都可以在栈上创建,函数执⾏结束时这些存储单元⾃动被释放。栈内存分配运算内置于处理器的指令集中,效率很⾼,但是分配的内存容量有限。栈区主要存放运⾏函数⽽分配的局部变量、函数参数、返回数据、返回地址等。2. 堆区(heap):⼀般由程序员分配释放,?若程序员不释放,程序结束时可能由OS回收。分配⽅式类似于链表。3. 数据段(静态区)(static)存放全局变量、静态数据。程序结束后由系统释放。

2024-03-11 15:37:16 971

原创 C语言动态内存管理面(下)常⻅的动态内存的错误

我们接着C语言动态内存管理(上)没讲完整的继续来深度讲解。

2024-03-10 17:21:26 342 1

原创 C语言动态内存管理(上)

• 有时会我们发现过去申请的空间太⼩了,有时候我们⼜会觉得申请的空间过⼤了,那为了合理的时候内存,我们⼀定会对内存的⼤⼩做灵活的调整。当是情况2的时候,原有空间之后没有⾜够多的空间时,扩展的⽅法是:在堆空间上另找⼀个合适⼤⼩的连续空间来使⽤。当我们的p是int*的指针时,p+i就相当于p向后跳过i个字节的地址,那么我们就可以使用循环来完成访问的过程。的时候,要扩展内存就直接原有内存之后直接追加空间,原来空间的数据不发⽣变化。• 如果参数 ptr 指向的空间不是动态开辟的,那free函数的⾏为是未定义的。

2024-03-07 16:41:55 2450

原创 C语言⾃定义类型:联合和枚举

我们使用代码来演示使用枚举来定义 星期和颜色enum Day//星期Mon,Tues,Wed,Thur,Fri, //大括号中放的是枚举的可能取值Sat,Sunenum Color//颜⾊RED,GREEN,BLUE以上定义的 enum Day ,, enum Color 都是枚举类型。{ } 中的内容是枚举类型的可能取值,也叫 枚举常量。这些可能取值都是有值的,默认从0开始,依次递增1,当然在声明枚举类型的时候也可以赋初值。

2024-03-06 08:45:22 935 1

原创 C语言自定义类型之结构体

位段的声明和结构是类似的,有两个不同:1. 位段的成员必须是 int、unsigned int 或signed int ,在C99中位段成员的类型也可以选择其他类型。2. 位段的成员名后边有⼀个冒号和⼀个数字.struct Aint _a:2;int _b:5;int _c:10;int _d:30;A就是⼀个位段类型那位段A所占内存的⼤⼩是多少?

2024-03-05 15:31:48 1143

原创 C语言指针超详细讲解(3)

在32位环境下,地址是32个二进制,需要4个字节,所以指针变量的大小就是4个字节.在64位环境下,地址是64个二进制,需要8个字节,所以指针变量的大小就是8个字节.在学习操作符的时候,我们学习了 sizeof , sizeof 计算变量所占内存内存空间⼤⼩的,单位是。关键点拨:指针变量的大小和类型无关,不管什么类型的指针变量,大小都是4/8个字节。字节,如果操作数是类型的话,计算的是使⽤类型创建的变量所占内存空间的⼤⼩。这个随机值是大于6的。因为&,取出的是整个数组的地址,所以跳过的是整个数组。

2024-03-03 15:29:28 850

原创 C语言中指针超详细讲解(2)

来为大家验证一下:假设有个Add函数来实现加法,有一个Sub函数来实现减法,那么我们尝试取出Add和Sub的地址.//字符指针数组 - 是一个数组 - 存放的是字符指针。上诉是我们没有使用指针数组写的程序,接下来我会为大家展示指针数组的作用之处了。这样操作起来是更加简单的,我们通过指针得到函数的地址,就可以调用它所指向的。函数指针数组 - 是数组 -存放的是函数指针 - 存放的是函数的地址。base:是一个指针指向待排序的第一个元素,是void*类型。类型的指针是用来存放任意类型数据的地址。

2024-02-28 16:52:13 512

原创 C语言中指针超详细讲解(1)

我们可以理解为数组名传参传的是首元素地址(上面讲到二维数组的首元素是一维数组,{1,2,3,4,5,}),那么我们就可以使用一个指针(*p)来指向这个一维数组(这个一维数组有五个元素)。其实很简单就是 *(p+i)的意思。可知,arr2中每个元素都是int* 类型的由于传的是首元素地址那么传的就是 int* 所以把一级指针取出来放入 int **arr(二级指针中)是没有问题的。1.sizeof(数组名),这里的数组名表示的是整个数组,sizeof(数组名)计算的是整个数组的大小,单位是字节。

2024-02-27 20:25:00 1227

原创 C语言中函数栈帧的创建于销毁

今天讲解的时候,使用环境是VS2013,不使用太高级编译器的原因是高级的编译器不容容易学习和观察。图中的esp,edp为main函数开辟了一段栈区用来维护main函数的运行,主函数从main函数开始执行。由于地址的跳动esp与edp也向上悦动,此时esp与edp之间的空间就是为main函数开辟的了。我们来解读一下,我们可以知道【ebp-14】的值是20(上面有讲解),此时出现了push(压栈)当我们在VS2013的编译器下是实现这个代码的时候我们可以了解到main的调用。使用上面的代码是Add函数。

2024-02-20 16:08:52 944

原创 深度剖析C语言的数据存储过程

1000000000000000000000000001------内存中的原码--= -1。100000000000000000000000000001010-原码------ -10。补码 11111111111111111111111111111------放入c中。0000000000000000000011111111-----内存中的补码 ==255。11111111111111111111111111111-----内存中的补码。空间的大小是根据不同的类型决定的。

2024-02-05 13:52:25 957 1

原创 使用C语言实现扫雷游戏

简单介绍:我们定义了两个函数来实现 IntBoard 和 DisplayBoard 前者用来初始化棋盘使其在没雷的时候打印的都是“0” 有雷的时候是“*”综上我们可以简单总结一下: 扫雷游戏的实现中使用了 函数(定义以及调用)传参 还有数组的基本使用方法 以及循环的使用 是C语言前半段的知识巩固。排查雷的过程:我们通过输入坐标来进行排查 当我们输入坐标后通过统计坐标旁边雷的数量来进行排查雷。打印棋盘时我们要明白一个道理我们打印的是9*9的棋盘但是当我扫雷时由于输入的是坐标。

2024-02-01 17:09:24 963 1

原创 使用C语言实现逆序输出

逆序输出简单描述:输入数字打比方 1 2 3 4 5 6 7 8 9 10,编写程序实现逆序输出为 10 9 8 7 6 5 4 3 2 1。关键点拨:while循环我们的 i 应该从9开始,因为要实现逆向输出的话画图说明一下。前面我们输入使用for循环,我们输出可以选择使用另一种循环,while循环。要实现逆向我们就要逆着访问然后输出,从下标为9开始(此时的原数为10)数组的访问很简单,就是创建一个变量i,使用循环来访问下标。思想:使用循环来实现数组的访问;先来讲一下数组的访问。第三步:实现逆向输出。

2024-01-24 10:22:49 1201 2

原创 C语言中的二分查找基本原理与思路

还拿数组{1,2 ,3, 4 ,5, 6, 7 ,8, 9 ,10 }为列。:找到平均数即(0+9)/2=4 整数除法(两边都是整数) 找到下标为4的数组。:对5和6的下标再次求平均值(5+6)\=5。基本认识:二分查找是一种效率高,速度快的一种查找方式,通过下标访问的方式来实现。这是遍历查找,对于个数少的有一定的优势,但当数量庞大时效率太低,不推荐使用。我们假设在数组 {1,2,3,4,5,6,7,8,9,10} 中找出7。第四步:对下标为6的求平均数(6+6)/2=6 即可找到。

2024-01-22 11:56:22 471 2

原创 用C语言实现阶乘的相加

i=3 ret=1*2*3 此时的ret=6 可以理解为1*2*3。i=2 ret=1*2 此时ret=2 可以理解为1*2。当n=2时ret=1*2 同样把值存在sum中 此时的ret=2。ret开始变化 例如:当for循环运行到i=3时,i=1 ret=1*1 此时ret=1。那么我们有没有其他方案呢,答案是有的我们可以这样在求2的阶乘时直接在1的阶乘上乘2 1*2。关键点拨:ret=ret*n 当n=1时ret=1*1 并把值存在sum中。

2024-01-22 10:09:12 593 1

空空如也

空空如也

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

TA关注的人

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