自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++动态内存管理:与C语言动态内存管理的差异之争

在C++中,内存管理是一个至关重要的主题。正确地管理内存可以避免内存泄漏和内存访问错误等问题,提高程序的性能和可靠性。本文将深入探讨C++中的内存管理机制,包括从C语言内存管理到C++内存管理转变,二者的关联等内容。和new/delete都是从堆上申请空间,并且需要用户手动释放。不同的地方是:1. malloc和free是函数,new和delete是操作符2. malloc申请的空间不会初始化,new可以初始化3. malloc申请空间时,需要手动计算空间大小并传递,

2024-05-10 21:41:45 880 8

原创 类与对象(下)

终于来到了我们类和对象的最后一部分,类与对象下。在这部分中,我们主要讲解类与对象的“插件” ,也就类似于拓展部分,比如友元函数,初始化列表等,让大家对C++类与对象有一个更深层次的理解。通过这三节的讲解,大家要知道,类就是对某一类实体对象来进行描述的,描述该对象具有那些属性,那些方法,描述完成后就形成了一种新的自定义类型,才用该自定义类型就可以实例化具体的对象。通过理解类与对象的概念,我们可以更好地应用面向对象的设计思想来解决实际问题,提高代码的质量和效率。

2024-05-03 16:35:34 865 9

原创 类与对象(中)

当一个类什么都不写的时候,我们通常叫它空类,那么空类中真的什么都没有吗?事实上,任何一个类在什么都没写的时候,都会生成六个默认成员函数,分别为构造函数,析构函数,拷贝构造函数,赋值重载函数,以及普通对象与const对象取地址函数。由于大多数后两个函数不需要我们手动操作,所以今天主要讲解的内容是前面四个函数。为了方便,我们会以Date类为例子,更加方便让大家理解。理解构造函数,析构函数,拷贝构造函数,赋值重载函数对理解C++雷雨对象有十分重要的作用。2.1、函数名必须要与类名一致。2.2、无返回值。

2024-04-24 00:37:53 990 13

原创 C++:类与对象(上)

class是我们定义类所使用的关键字,使用方法跟定义结构体类似,我们可以在类的主体部分定义成员变量与成员函数。类通常有两种定义方式,第一种就是声明与定义全部放在类体中,但需要注意的是,如果函数是在类里面定义的,编译器可能默认会将函数处理成内联函数。第二种方法就是类声明放在.h头文件中,定义放在.cpp源文件上,一般来说,除非迫不得已,我们更推荐使用第二种定义方式。但需要注意的是,由于类域的限制,我们在.cpp文件中写定义的时候,要在函数名前加上类名::这一点就跟C语言模拟实现栈,队列等数据结构一样。

2024-04-19 19:51:08 774 5

原创 常见排序宝典:帮助快速上手常见基础排序算法(下)

归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即显示每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。和选择排序一样,归并排序的性能不受输入数据的影响,但表现比选择排序好的多,因为始终都是 O(nlogn) 的时间复杂度。代价是需要额外的内存空间。

2024-04-10 23:38:08 943 9

原创 常见排序宝典:帮助快速上手常见基础排序算法(上)

希尔排序是对直接插入排序的优化当gap值>1时都是预排序,目的是为了让数组更加接近有序。当gap==1时,数组已经接近有序,这样就会很快。希尔排序的时间复杂度不好计算,并不固定。

2024-04-07 16:09:10 548 3

原创 震惊:引用与内联函数居然携手迈入c++

当涉及到优化C++代码时,内联函数和引用是两个重要的概念。内联函数可以减少函数调用的开销, 而引用可以提高代码的可读性和效率。在本文中,我们将深入探讨C++中内联函数和引用的知识点。

2024-04-05 00:15:21 260 1

原创 命名空间:组织代码的利器

在大型项目的代码分工工作中,通常会出现不同的人自己定义了相同名字的函数,参数等。就可能出现名字冲突或者命名污染等问题。为了避免这些问题的出现吗,我们就引出了“namespace”,命名空间这一概念。使用命名空间的目的是为了对标识符的的名称进行本地化,防止命名冲突,提高代码的可读性与可维护性。通过命名空间,我们可以将代码模块化,使得代码结构更清晰。在c语言中当我们定义一个全局变量rand,就会与stdlib.h库中的rand函数冲突。于是我们就在c++中引入了命名空间的概念。

2024-03-30 17:46:28 396 1

原创 走进c语言动态内存管理,拨开她的神秘面纱

总的来说,熟练的使用动态内存管理可以方便我们写出更好的,更灵活的代码,弥补函数中临时变量出了作用域就会被销毁的缺点。

2024-02-23 17:22:43 572 2

原创 c语言自定义类型:结构体的前世今生

在c语言中,结构体(struct)是一种用户自定义的数据类型,允许将不同类型的组合在一起,以便作为一个单独的数据单元来使用。结构体可以包含多个不同数据类型的成员变量,这是他们能表示更为复杂的数据结构。通俗的说,我们可以把结构体想象成一种生物,比如一种结构体就是人类,人类的性别,名字,国籍,年龄等标签,这些标签就是人类这个结构体不同类型的成员变量。人是一种结构体,那么植物,动物都可以算作是不同的结构体类型。有了结构体这种自定义的数据类型,我们才能更恰当且方便的让代码变得实用。

2024-02-22 17:20:39 1096 7

原创 c语言常见内存函数的使用与模拟实现

c语言提供了几个用于内存操作的函数,包括memcpy,memmove,memset,memcmp。这些函数可以高效且可靠的处理数据,本文将简单向大家介绍一下这些函数的使用,并简单模拟实现一下。

2023-12-27 23:43:39 861 1

原创 常见字符串函数的初步讲解(使用与简单模拟实现)

一、字符分类函数前言:在编程的过程中,我们经常要处理字符和字符串,为了方便操作字符和字符串,C语言标准库中提供了一系列库函数,现在接下来就简单讲解一下下面的字符串函数一、字符分类函数在C语言中,有一些常用的字符分类函数可以帮助我们对字符进行分类和判断。这些函数属于C标准库中的ctype.h头文件,并提供了对字符进行分类的功能。(使用以下函数时都需要包含ctype.h头文件)islower函数通过判断这里的c是否为小写字母而返回真值HeheHEHE。

2023-12-22 23:13:08 778

原创 c语言:从指针到指针数组

指针变量是为了储存内存地址的一个变量,在我们创建一个变量的时候,就会在内存中申请一块区域,这块区域就是这个变量的地址。由于这个四个地址的序号都是连着一块的,当我们知道第一个字节的地址时,就可以顺便地推出另外三个字节的地址。所以为了方便,指针指向a时,实际上指向的是a的第一个字节。我们如何去取出一个元素的地址呢?这里就要介绍一个操作符了:&,取地址操作符。这样就会打印出a所占四个字节的第一个字节的地址,比如:0x006FFD70,我们一般使用一个指针变量来接收 ,

2023-12-18 11:34:38 827

原创 assert断言使用的必要性

这主要是为了防止野指针的危害,我们都知道,野指针具有极大危害性,为了让程序安全的运行下去,我们就需要再对指针的引用与结束时使用assert判断该指针是否已经变成了野指针。另外,assert也可以用在其他判断方面,在我们运行一个极其复杂的代码时,其中一些重要数据就需要通过assert来判断是否符合预期的值,方便程序成功的运行下去。,程序就会去验证p是否等于NULL,如果确实不等于NULL,程序就会继续运⾏,否则就会终⽌运行,并且给出报错信息提示。,用于在运行时确保程序符合指定条件,如果不符合,就报。

2023-11-22 19:04:21 39 1

原创 冒泡排序模拟实现qsort函数

我们先看一下bubble_sort这个函数的代码,由于qsort函数可以比较任意类型的大小,但bubble_sort的if条件语句中,条件语句的判断靠的是整形计算大小,那我们应该怎么修改这个条件语句,让任意类型的数据都能通过大小比较进入语句呢?qsort函数最重要的一个参数, int (*compar)(const void*,const void*)),是一个函数指针,指向一个函数,这个函数是我们使用者自己提供的,用来比较这个目标数组中两个元素大小。这样一来,我们模拟的bbs函数就差不多成功了。

2023-11-21 01:15:11 36 1

原创 扫雷游戏的简单设计

定义两个数组,一个是mine,一个是show。当我们进入游戏后,首先应该是先有一个让玩家扫雷的棋盘,我们便把一开始的二维数组放在game函数里定义,为了方便后续调整,我们可以在game.h中用#define 定义ROW行为9,COL列为9,这样就可以通过对#define ROW 9的调整,省略后续一连片的值的修改。因为经典的扫雷是一个二维平面模型,我们便自然而然的联用到用二维数组来表示我们的扫雷盘,如果要在9*9的棋盘上布置雷的信息和排查雷,我们⾸先想到的就是创建⼀个9*9的数组来存放信息。

2023-11-01 02:10:27 47

原创 C语言的分支循环语句

c语言的有分支结构与循环结构我们可以使⽤ if 、 switch 实现分⽀结构,使⽤ for 、 while 、 do while 实现循环结构。

2023-10-25 18:54:02 38 3

原创 逻辑操作符

逻辑运算符提供逻辑判断功能,⽤于构建更复杂的表达式,主要以下三个运算符:!:逻辑取反运算符(改变单个表达式的真假)&& :与运算符,就是并且的意思(两侧的表达式都为真,则为真,否则为假)|| :或运算符,就是或者的意思(两侧⾄少有⼀个表达式为真,则为真,否则为假)

2023-10-18 18:33:46 80 1

原创 利用ASCII码表来打印字符

我们知道在计算机中所有的数据都是以⼆进制的形式存储的,那这些字符在内存中分别以什么样的⼆进制存储的呢?如果我们每个⼈⾃⼰给这些字符中的每个字符编⼀个⼆进制序列,这个叫做编码,为了⽅便⼤家相互通信,不造成混乱,后来美国国家标准学会(ANSI)出台了⼀个标准ASCII编码,C语⾔中的字符就遵循了ASCII编码的⽅式。我们可以在键盘上可以敲出各种字符,如:a,q,@,#等,这些符号都被称为字符。C语⾔中字符是⽤单引号括起来的,如:'a','b','@'。另外,\ddd与\xdd两种转义字符也可以表达字符。

2023-10-17 01:16:31 1260

原创 关系表达式的返回值

我们可以看见,4>3>2应该是正确的才对,但是关系运算符是从左往右依次计算,4>3为真,返回1,于是接下来的运算就是1>2,显然错误,所以最后返回0,条件语句不执行。当a>b>c时,程序优先运行a>b,为真返回1,为假返回0,再将1或者0拿去跟c比较。我们熟知当if括号中不为0时,if条件语句才会被执行。hehe并没有被打印,所以此时括号里返回了0,为假。可以看到,这里的if条件语句是真,所以执行了。例如,2>1返回1,2

2023-10-15 17:30:13 123

原创 c语言中的常见关键字及转义字符合集

现在是大学开学正式学习第四天,作为一名大一的新生,我很激动能够学到c语言。作为一名非科班的学生,我希望能在大一上期末转到计科院,所以我会努力学习c语言以达到我的目标。由于要兼顾高数,线性代数,四六级的学习,所以我只能固定每天两到四个小时不等的时间来学习技术,希望能在接下里的日子里刻苦学习,使自身技术显著提高。下面就来复习一下这几天的学习内容。

2023-10-12 13:37:57 53

空空如也

空空如也

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

TA关注的人

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