自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 函数指针数组的实践:转移表

把函数的指针(地址)作为参数传递给另⼀个函数,当这个指针被⽤来调⽤其所指向的函数时,被调⽤的函数就是回调函数。然后我们再思考一个问题,第一个代码有很多重复的部分,我们有没有什么办法把这些重复的部分统一表示一下呢?所以我们利用函数指针数组重新实现计算器,代码清晰有条理而且很简单。可以看出这样的代码繁琐且冗长。函数指针数组的⽤途:转移表。我们先实现一下简单的版本。

2024-02-06 16:33:56 360

原创 深入理解指针(2)

我们创建地str1数组存储hello bit,先创建一块空间 str2数组存储hello bit又创建一块空间 ,但是这两块空间是截然不同的两块空间,而str3和str4都是指针变量,指向的是常量字符串,而常量字符串不可以改变,所以没有必要创建两份,所以创建一份还可以节省空间。另外str1,str2,str3,str4都是创建在栈区的,而指向的hellobit.是在静态区的。存放的是整形变量的地址,能够指向整形数据的指针。首元素就是第一行,第一行的地址就是首元素的地址,第一行的地址就是数组指针的地址。

2024-02-06 14:48:41 372

原创 深⼊理解指针1(指针和数组)

其实我们知道数组在传参时传递的是数组名arr,也就是数组首元素的地址,所以在进行sizeof(arr)计算时计算的是⼀个地址的⼤⼩(单位字节)⽽不是数组的⼤⼩(单位字节),正是因为函数的参数部分是本质是指针,所以在函数内部是没办法求的数组元素个数的。同理arr[i] 应该等价于 *(arr+i),数组元素的访问在编译器处理的时候,也是转换成⾸元素的地址+偏移量求出元素的地址,然后解引⽤来访问的。,这⾥的数组名表⽰整个数组,取出的是整个数组的地址(整个数组的地址和数组⾸元素的地址是有区别的)

2024-02-02 14:59:54 896

原创 指针初步1

在指针类型中有⼀种特殊的类型是 void* 类型的,可以理解为⽆具体类型的指针(或者叫泛型指针),这种类型的指针可以⽤来接受任意类型地址。变量是可以修改的,如果把变量的地址交给⼀个指针变量,通过指针变量的也可以修改这个变量。这里实际上没有交换成功的是x和y确实接收到了a和b的值,但是x,y和a,b的地址不一样相当于x和y是独⽴的空间 ,自然无法实现交换,但是我们如果把地址传过去呢?• const如果放在*的右边,修饰的是指针变量本⾝,保证了指针变量的内容不能修改,但是指针指向的内容,可以通过指针改变。

2024-01-31 20:51:55 887

原创 操作符详解

表达式的整型运算要在CPU的相应运算器件内执⾏,CPU内整型运算器(ALU)的操作数的字节⻓度⼀般就是int的字节⻓度,同时也是CPU的通⽤寄存器的⻓度。同上,操作符的优先级只能决定⾃减 -- 的运算在 + 的运算的前⾯,但是我们并没有办法得知, + 操作符的左操作数的获取在右操作数之前还是之后求值,所以结果是不可预测的,是有歧义的。2进制和10进制是类似的,只不过2进制的每⼀位的权重,从右向左是: 2 , 2 , 2 ... 0 1 2如果是2进制的1101,该怎么理解呢?各种运算符的优先级是不⼀样的。

2024-01-30 21:30:59 1090 1

原创 经典例题:打印素数

首先我们要了解一下什么是素数,素数指在大于1的自然数中,除了1和该数自身外,无法被其他自然数整除的数就叫做素数。所以我们就可以想到利用for循环嵌套来解决本题,判断该数是否能在。利用上面实现的is_prime函数,打印100到200之间的素数。实现一个函数is_prime,判断一个数是不是素数。

2024-01-29 16:41:35 177

原创 经典例题:打印乘法表

首先我们可以先看一下9*9乘法表,我们发现先用for循环打印行数,再嵌套一个for循环进行列的打印即可实现。如:输入9,输出9*9口诀表,输出12,输出12*12的乘法口诀表。实现一个函数,打印乘法口诀表,口诀表的行数和列数自己指定。

2024-01-29 10:53:50 232

原创 经典例题:水仙花数的实现

首先我们要先分析一下这个数有多少位数,所以我们用count来计数。然后我们还要得到这个数的每一位数字,并且调用pow函数来计算该数的位数次方和原数进行比较即可。“水仙花数”是指一个n位数,其各位数字的n次方之和确好等于该数本身,如:153=1^3+5^3+3^3,则153是一个“水仙花数”。求出0~100000之间的所有“水仙花数”并输出。实际上我们得到的并不全是水仙花数 ,而是自幂数。

2024-01-28 22:40:57 316

原创 经典例题:打印菱形

首先我们可以把菱形拆成上下两个部分。

2024-01-28 11:50:44 452

原创 VS实用调试技巧

正文开始。

2024-01-23 20:33:23 944 1

原创 C++中的引用

结论:C++推荐用引用技术,因为语法方便,引用本质是指针常量,但是所有的指针操作编译器都帮我们做了。总结:通过引用参数产生的效果同按地址传递是一样的,引用的语法更清楚简单。在函数形参列表中,可以加const修饰形参,防止形参改变实参。作用:函数传参时,可以利用引用的技术让形参修饰实参。本质:引用的本质在c++内部实现是一个指针常量.作用:引用是可以作为函数的返回值存在的。* 引用在初始化后,不可以改变。注意:不要返回局部变量引用。作用:常量引用主要用来修饰。2.1 引用的基本使用。2.3 引用做函数参数。

2024-01-23 19:05:21 408 1

原创 C++内存分区模型

存放 CPU 执行的机器指令代码区是**共享**的,共享的目的是对于频繁被执行的程序,只需要在内存中有一份代码即可。堆区开辟的数据,由程序员手动开辟,手动释放,释放利用操作符 delete。代码区是**只读**的,使其只读的原因是防止程序意外地修改了它的指令。:由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收。不同区域存放的数据,赋予不同的生命周期, 给我们更大的灵活编程。* 常量区中存放 const修饰的全局常量 和 字符串常量。C++程序在执行时,将内存大方向划分为**4个区域**

2024-01-22 20:53:28 485 1

原创 C++类与对象之多态

多态使用时,如果子类中有属性开辟到堆区,那么父类指针在释放时无法调用到子类的析构代码。在多态中,通常父类中虚函数的实现是毫无意义的,主要都是调用子类重写的内容。* 静态多态: 函数重载 和 运算符重载属于静态多态,复用函数名。* 动态多态的函数地址晚绑定 - 运行阶段确定函数地址。静态多态的函数地址早绑定 - 编译阶段确定函数地址。* 子类必须重写抽象类中的纯虚函数,否则也属于抽象类。* 动态多态: 派生类和虚函数实现运行时多态。因此可以将虚函数改为**纯虚函数*** 都需要有具体的函数实现。

2023-12-18 17:50:47 607 1

原创 C++类与对象之运算符重载

好久不见,最近很忙,今天我们来学一下C++中非常重要的一部分:运算符重载。我们知道递增运算符有两种,我们先写一段代码复习一下递增运算符的基本用法。:对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型。这里a先赋值,所以a++为0,之后在加1,得到1;让我写代码带大家实现一下。既然大家都知道了,我们开始重载递增运算符的讲解。3. 默认拷贝构造函数,对属性进行值拷贝。1. 默认构造函数(无参,函数体为空)2. 默认析构函数(无参,函数体为空)计算⼝诀:先+1,后使⽤;口诀:先使⽤,后+1。

2023-12-16 23:43:25 114 2

原创 数组排序的方法

是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,继续放在起始位置知道未排序元素个数为0。2>再从剩余未排序元素中继续寻找最小(大)元素,然后放到未排序序列的起始位置。每一轮依次比较当前元素和后面的元素,如果当前元素比后面元素大,则交换他们的位置。1>首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。3>重复第二步,直到所有元素均排序完毕。总共需要比较n-1轮。

2023-12-12 23:33:25 52 1

原创 C++基础之类与对象

老铁们,为了应付一下即将来临的期末考试,我出一期C++中类与对象的博客,大家可以参考一下,希望有所帮助,来喽!人可以作为对象,属性有姓名、年龄、身高、体重...,行为有走、跑、跳、吃饭、唱歌...车也可以作为对象,属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...具有相同性质的==对象==,我们可以抽象称为类,人属于人类,车属于车类。C++认为万事万物都皆为对象,对象上有其属性和行为。

2023-12-11 21:34:31 343 2

原创 C语言数组查找的方法

上一个章节我们讲完了数组的概念和基本用法,接下来我会为大家仔细的讲解数组的查找和排序方法,代码稍微有点复杂,但相信大家一定掌握的,来喽!这是顺序查找的排序部分,我们用for循环访问数组,在挨个查找目标数字,如果找到该数字,则返回该数组的下标,没有该数字就返回-1.下标为4对应的数字为5,5<7,则5左边不会有7,则再次从6开始查找,这样查找的范围缩小了一半,所以叫做二分查找或折半查找。再进行(5+6)/2=5,对应的数字为6,6<7,这样被查找的范围只剩下了7,即7可以被找到。1.找出数组的中间元素。

2023-12-11 17:26:43 1535 4

原创 数组初步1

type 指定的是数组中存放数据的类型,可以是: char、short、int、float 等,也可以⾃ 定义的类型。[ ] 中的常量值是⽤来指定数组的⼤⼩的,这个数组的⼤⼩是根据实际的需求指定就⾏。数组也是有类型的,数组算是⼀种⾃定义类型,去掉数组名留下的就是数组的类型。这个程序的思路就是利用for循环来产生0-9的下标,再通过数组来访问。,数组在创建的时候,我们需要给定⼀些初始值值,这种就称为初始化的。• 数组中存放的是1个或者多个数据,但是数组元素个数不能为0。arr_name 指的是数组名的名字。

2023-12-10 21:02:15 112 3

原创 分支与循环实践:猜数字游戏的实践

我们就不难发现,其实rand函数⽣成的随机数是伪随机的,伪随机数不是真正 的随机数,是通过某种算法⽣成的随机数。之所以前⾯每次运⾏程序产⽣的随机数序列是⼀样的,那是因为rand函数⽣成随机数的默认种⼦是1。rand函数会返回⼀个伪随机数,这个随机数的范围是在0~RAND_MAX之间,这个RAND_MAX的⼤⼩是 依赖编译器上实现的,但是⼤部分编译器上是32767。我们可以看到虽然⼀次运⾏中产⽣的5个数字是相对随机的,但是下⼀次运⾏程序⽣成的结果和上⼀次 ⼀模⼀样,这就说明有点问题。

2023-12-09 23:36:17 122 2

原创 第3讲:分⽀和循环(上)

上⾯的代码排版,让 else 和第⼀个 if 语句对⻬,让我们以为 else 是和第⼀个if匹配的,当 if 语句不成⽴的时候,⾃然想到的就是执⾏ else ⼦句,打印 haha ,但实际上 else 是和第⼆个 if 进⾏匹配的,这样后边的 if...else 语句是嵌套在第⼀个 if 语句中的,如果第⼀个 if 语句就不 成⽴,嵌套 if 和 else 就没机会执⾏了,最终啥都不打印。,if语句为真,则打印成年了, if语句为假,则不打印,对于 printf("可以谈恋爱了\n");

2023-12-04 15:54:32 66 2

原创 第2讲:C语⾔数据类型和变量

其实每⼀种数据类型有⾃⼰的取值范围,也就是存储的数值的最⼤值和最⼩值的区间,有了丰富的类 型,我们就可以在适当的场景下去选择适合的类型。每⼀种数据类型都有⾃⼰的⻓度,使⽤不同的数据类型,能够创建出⻓度不同的变量,变量⻓度的不 同,存储的数据范围就有所差异。• 局部变量:在⼤括号内部定义的变量就是局部变量 局部变量的使⽤范围是⽐较局限,只能在⾃⼰所在的局部范围内使⽤的。• 全局变量:在⼤括号外部定义的变量就是全局变量 全局变量的使⽤范围更⼴,整个⼯程中想使⽤,都是有办法使⽤的。

2023-11-23 11:23:19 67 4

原创 C语言的常见概念

在键盘上可以敲出各种字符,如:a,q,@,#等,这些符号都被称为字符,C语⾔中字符是⽤单引号 括起来的,如:'a','b','@'。如果我们每个⼈⾃⼰给这些字符中的每个字符编⼀个⼆进制序列,这个叫做编码,为 了⽅便⼤家相互通信,不造成混乱,后来美国国家标准学会(ANSI)出台了⼀个标准 ASCII 编码,C 语⾔中的字符就遵循了 ASCII 编码的⽅式。那我们常⻅的C语⾔编译器都有哪些呢?C语⾔字符串中⼀个特殊的知识,就是在字符串的末尾隐藏放着⼀个 \0 字符,这个 \0 字符是字符串 的结束标志。

2023-11-19 23:02:10 75 4

空空如也

空空如也

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

TA关注的人

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