- 博客(27)
- 收藏
- 关注
原创 C++获取虚表地址和虚函数地址时的两个强制类型转换
今天学习虚函数时看到代码中的两个强制类型转换十分不解,查了蛮多资料,终于知道了原因,因此写下自己的见解。简单说一下虚表的概念:在一个类中如果有虚函数,那么此类的实例中就有一个虚表指针指向虚表,这个虚表是一块儿专门存放类的虚函数地址的内存。通过sizeof运算符我们可以查看一个对象所占的空间,对于一个只有函数(无虚函数)没有属性的空类对象,它的空间长度为1,而对于有虚函数、没有属性的空类对象...
2018-08-21 17:47:53
1015
5
原创 队列——数组实现
队列是一种先进先出的思想。(First In First Out)关于队列的定义就不叙述了,百度比我讲的详尽的多,在这里说一下用数组实现队列的思想,并附上代码。我们身边的与队列相关实例很多,火车站排队买票或是买饭是排队,都是队列。因此我们很容易想到,队列是有一个头一个尾的,新来的总是在尾,最先来的总是最先买票或是吃饭,当然,像插队一类的我们不做考虑,相信我们都不会喜欢这些的。队列的成员...
2018-08-14 00:07:31
12137
2
原创 硕彦博创学习记录——C++(构造函数,拷贝构造函数(深、浅拷贝)、析构函数)
类的基本知识大家都知道,这里先说一下构造函数。类定义完成后系统并不会为类分配空间,而是在定义类的对象时分配空间,就像C语言中定义变量,只有定义了变量,才有空间,为对象分配空间时通过构造函数来完成的。构造函数可以人为定义,也可以系统默认调用。如果不自己定义构造函数,则系统的调用的默认构造函数只是为对象分配空间,并不会对类的属性进行赋值等操作,或者说此时的值是未知的、随机的。人为定义的构造...
2018-08-13 20:15:58
224
原创 硕彦博创学习记录——C++函数模板、重载、引用
C:面向过程C++:面向对象。C++完全兼容C语言,新增对象的知识。C语言的知识在C++中是完全适用的,这里就不多说那些原来的知识,主要说总结一下目前学习到的新知识。1、C语言的头文件: 带.h 如:stdio.h C++的头文件:不带.h 如:iostream 注:在C++文件中也可以调用C语言头文件包含的函数,所以说C++包容C。 ...
2018-08-13 19:01:31
207
原创 递归函数
我们把一个直接调用自己或通过一系列的调用语句间接地调用自己的函数,称作递归函数。递归有一个最重要的要求:必须要有结束条件,否则将陷入无穷无尽的调用中。在我看来,理解递归的最大的难度就是,无法理解它的调用顺序,我们都知道递归的顺序是倒着的,那么为什么呢?我也是今天才想明白,首先,大家一定不能被使用时不断重复的名字所迷惑,它的本质就是一个函数在调用另一个函数。比如说有如下代码:#...
2018-07-31 20:12:17
334
原创 硕彦博创学习记录——2018.7.30&31(链表)
链表是一种物理存储单元上非连续、非顺序的储存结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一个头指针和一系列节点(链表中每一个元素成为节点)组成,节点在增加时由程序员申请空间,删除时释放空间。每个节点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一节点地址的指针域。链式结构相对于数组有几个十分显著的优点。1,使用数组必须定义一个有限的长度,而链表的长度则在理论上可以...
2018-07-31 19:33:55
168
原创 硕彦博创学习记录——2018.7.26(利用栈写高级计算器)
注:此高级计算器目前只有0~9的加减乘除复杂运算,含括号思想:我们平常看到的运算符都是中缀表达式,如1+(2+3*4)-5但是编译器是不认识这种表达式的,因此在编译的时候是要先转换成计算机能够识别的的表达式即后缀表达式,1234*++5-因此高级计算器应有两个步骤:1、将中缀表达式转换成为后缀表达式2、规定计算规则,即怎么进行计算首先我们来看看怎么将中缀表达式转换成为后缀表...
2018-07-27 10:38:10
192
原创 硕彦博创学习记录——2018.7.25(顺序栈)
#include<stdio.h>struct stack{ int buf[10]; int top;};void initStack(struct stack* p);short push(struct stack* p,int* pdata);short pop(struct stack* p,int* pdata);short IsFull(struct s...
2018-07-25 20:37:54
208
原创 硕彦博创学习记录——2018.7.25(二级指针)
一级指针变量:专门用于存放普通变量的地址eg: int a=200; int* p=&a;二级指针变量:专门用于存放一级指针变量的地址(以此类推,三级存二级……)#include<stdio.h>int main(){//定义变量:按类型来分配空间 int b=200;//引用变量:引用变量的内容 printf("b=%d\n",b);//修...
2018-07-25 20:21:37
173
原创 硕彦博创学习记录——2018.7.24(指针——指向二维数组、结构体,指针数组)
指针数组:专门用来存放指针的数组类型* 数组名[长度]指针数组也是数组,它是用来存放指针的,或者说地址。在上图中,buf+i表示的是第i+1个指针在内存中的地址,buf[i]则是第i+1个指针中存放的内容,比如说buf[0]中存放的是&a,是变量a在内存中的地址,buf[0]=&a. *buf[0]=100,是输出变量a的值。二维数组与指针:从上图可以看到...
2018-07-24 23:09:57
862
原创 动态数组
这是今天学习时用到的一个示例,并不完整。#include<stdio.h>#include<stdlib.h>#include<string.h>//数组的容量,数组的长度,数组的下标struct Array{ int* data; //堆区 unsigned len; //容量长度 short index; //索引};int ...
2018-07-23 19:10:09
186
原创 硕彦博创学习记录——2018.7.20 & 2018.7.23(指针)
1、物理地址:内存条上连续的编号2、指针:就是地址3、变量: 整型变量: int a=100; 整型变量:专门存放整型的值 指针变量:专门存放指针的变量 运算符: 1、取变量地址:& 2、引用地址的内容:*指针 定义:类型 *变量名 引用指针变量:引用内容 注:引用指针内容的长度取决于指针的...
2018-07-23 18:54:21
185
原创 二分(折半)查找法
前提:查找序列是有序(降/升序) 假定:升序 1、每次取序列中间元素进行比较 2、如果key>mid,说明查找值在中间元素的右侧 如果key<mid,说明左侧 如果key=mid,说明查找成功 3、如果查找不成功,则再重复1、2步骤,直到查找成功或失败 递归: ...
2018-07-19 20:11:47
327
原创 硕彦博创学习记录——2018.7.19(结构体)
1、C语言基本类型:字符型、整型、浮点型2、结构体(复杂类型):自定义类型 3、定义变量:为了分配空间 类型 变量名; //注:非陪空间编译器通过类型来分配 初始化:分配空间的同时赋值 3.1定义结构体(自定义)类型 struct 类型名 { ... 属性1; ...
2018-07-19 20:03:17
197
原创 硕彦博创学习记录——2018.7.18(函数)
函数:就是功能(实现这个功能过程) 1、定义函数: 返回值 函数名(形参) { } static 返回值 函数名(形参) { } 注:如果被修饰为static,此函数只能被本地调用。 2、调用函数:执行一次函数 注:此函数的作用域一定要存在声明(告诉编译器,此接口就是为一个函数) 声明函数:告诉编译器,...
2018-07-18 17:14:31
173
原创 硕彦博创学习记录——2018.7.17(函数、作用域)
C语言是面向过程(以模块(函数)为单位) f(x)=3x+2 计算:当x=2 3*2+2 f(x,y)=3x+y函数:就是一个功能模块(完成某个功能的过程:完成排序) 1、函数分类: 自定义函数 系统函数 2、系统函数:就是由系统提供的功能(模块) printf 3、自定义函数: 返回值 函数名(形参) { 函数体;//模块的过程 return 返...
2018-07-17 19:22:43
262
原创 选择算法
选择算法是一种排序算法它是将无序组的最值取出放在有序组的后面,即无序组的第一位1、遍历数据2、找到无序组的最值(监哨值法)3、将最值与无序组第一位交换位置代码如下:...
2018-07-17 17:34:46
893
原创 插入算法
插入算法是一种排序算法在运用插入算法时一般将数据分为两组,有序组和无序组,并且将数据的第一个元素默认为有序组,将无序组的元素一个一个按照某种排列方式插入到有序组中。在此我们以大小顺序的排列为例,进行详细讲解:1、有如下一组数据:1,7,2,6,9,5,4,3。我们将这组数据从小到大进行排列2、将数据分为有序组和无序组,第一位元素1默认为有序组,后面的7,2,6,9,5,4,3为无序...
2018-07-16 23:07:26
9035
1
原创 字符串:查找子字符串
在一个长字符串中查找某一子字符串的算法分为以下两步:1、遍历长字符串,查找子字符串的首字符遍历:while(buf[i]!='\0')查找:if(buf[i]==sub[0])2、比较首字符后的若干字符是否与子字符串相同比较:while(sub[x]==buf[i+x]&&sub[x]!='\0')代码如下:...
2018-07-16 22:16:32
633
原创 硕彦博创学习记录——2018.7.11(运算符、输入输出)
流程控制:1、顺序 2选择 3循环1循环:for while do-while while(逻辑值的表达式)//先判断再执行 { 循环体 } do { }while(逻辑值的表达式); //先执行再判断注:1、表达式为真,继续循环;表达式为假,退出循环 2、表达式中值是否初始化。 3、结束退出 运算符:8、逗号运算符: 表达...
2018-07-13 19:30:50
174
原创 字符串:复制、字母转大写、字符转整型、比较
复制:小写字母转大写:字符转整型:比较:在进行比较的时候,我们尤其要注意一下while((result=buf[i]-buf1[i]==0&&buf[i]!='\0')这一句,顺序很重要我们来看个例子:这里错误的原因是,buf[i]为'\0',跳出循环,不进行result=buf[i]-buf1[i]的计算,从而导致result的值为buf的l的ASCII码值与buf1的l的ASC...
2018-07-12 19:48:35
297
原创 冒泡算法
什么是冒泡算法?在足够深的水里,有一堆气泡,它们的大小不同,上浮的速度也不同,经过一段时间后,最大的气泡总是在最上面,最小的气泡总是在最下面。在算法中,将一组数据按照类似气泡的排列方式排序的算法叫做气泡算法。我们拿实例来进行讲解:结果如下:在j的循环中,可以看到,每一个数据总是与下一个数据比较,然后将最大的数据向右移一位,也就是说,当遇到一个最大值时,在j的第一个循环周期内,会直接移至最右方,同理...
2018-07-12 19:19:23
419
原创 硕彦博创学习记录——2018.7.10(if、for、switch)
块语句:成为一个整体{ 语句1; 语句2; ...}语句: 空语句: ; 非空语句: ***; 程序的流程控制:顺序,选择控制,循环 1、顺序执行:从上往下,逐条来执行 2、选择控制:当达到某种条件,执行特定的指令。 if switch if(逻辑条件表达式) ...
2018-07-10 19:33:16
367
原创 硕彦博创学习记录——2018.7.1(shell命令)
Shell命令:操作系统的一个字符串操作 1、关机:halt reboot poweroff 2、帮助手册:man 3、目录、文件操作:Linux采用的文件是ext3(树形结构) 3.1路径表示法: 绝对路径:(从根开始)/home/LF/桌面/test.txt 相对路径:相对于当前的位置而言的一个位置 ...
2018-07-08 19:54:27
161
原创 硕彦博创学习记录——2018.7.7(vi编辑器、用户root)
vi的编辑器:1、三种模式:底行模式 命令模式 插入模式 命令模式: 1、从命令切换插入模式: i : 光标所在左侧输入 I:光标移动到所在行的最左则 o :光标移动的下一行(新的一行) O:光标移动的上一行(新的一行) a :光...
2018-07-08 19:54:12
173
原创 硕彦博创学习记录——2018.7.8(运算符)
字符类型: 字符常量:'a' 一个字符 字符串常量: "abcd" 多个字符 字符变量:1.定义变量 [有无符号] 类型 变量;2、引用变量:引用变量的内容 浮点型: 1、浮点型常量: (十进制)3.14 科学表示3e12 2、浮点型变量:float double [有符号] 类型 ...
2018-07-08 19:46:23
228
原创 硕彦博创学习记录——2018.6.30(环境)
1、就业方向(C): 应用层:服务器(Unix/Linux),应用开发 嵌入式:服务器,驱动(Unix/Linux)2、为什么需要安装VMware程序 系统必须在一台(计算机:内存,CPU,I/O)运行。学习时需要两个系统(Windows、Linux),在某主机通过虚拟系统运行环境。3、为Linux配置机器的运行环境:CPU、内存、硬盘、I/O、光驱、网卡.....
2018-06-30 17:55:43
409
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人