- 博客(18)
- 收藏
- 关注
原创 C++复习(二)C/C++区别(题目更新)
第二部分 C/C++区别1.new和malloc的区别①new是关键字,malloc是个返回值为void*的函数②new开辟空间的大小由系统确定,malloc需要传递开辟空间的大小③new不仅可以开辟内存,还可以做内存的初始化 ,而malloc只能进行内存开辟如:int p1=new int(20);④malloc开辟内存失败,是通过返回值和NULL作比较的,而new开辟内存失败,是通过抛出bad_alloc类型的异常来判断的。⑤new开辟内存的时候是指定类型的,是返回值类型安全的,mallo
2020-08-04 11:11:55
182
原创 C++复习(一)编译链接运行原理(题目更新)
1.编译链接原理编译链接全过程分为:预编译,编译、汇编、连接四个过程预编译阶段:处理源代码里面以“#”开始的预编译指令但是不处理 #pragma lib#pragma link 这些都是持续到链接阶段展开宏定义,删除注释。生成.i文件编译:在预编译完的基础上进行词法分析、语法分析、语义分析还有优化后生产相应的汇编代码文件。这个过程是核心部分也是最复杂的部分。生成.s文件汇编:汇编器将汇编代码转变成机器可以执行的指令,每一个汇编语句几乎都是一条机器指令。这相比编译器的工作稍微简单一些。生成.o
2020-08-03 17:28:38
242
原创 排序算法(一)选择排序(简单选择排序、堆排序)思想图解及代码
今天来总结一下著名的八大排序算法中的选择排序中的两种排序,为什么从这里开始讲,不知道,随便吧,从哪里开始都行。其实初学我也总是忘记,函数名和参数写好之后就开始发呆了,我自己的一些经验来看:对于每种排序算法我们首先得了解核心思想,然后根据这个核心思想可以进行几轮的手动排序,从中得到核心代码,再由核心代码再完整的写出来整个排序算法。当然了,大佬完全可以在脑子里面进行动态的转换的…我就不行了。所以我会主要记录一下前两步,也方便自己后面的复习。1.简单选择排序:再写代码之前再说几句:无论是我还是正在读文
2020-07-30 21:03:06
685
原创 二叉树系列:二叉树的构建(附详细图解和可运行代码C)(未完)
今天来总结一下二叉树构建的方法:这是二叉树系列文章的第一篇,对于二叉树的定义、概念就不过多叙述,先从二叉树的构建来总结,如果缺少理论知识,无论是程杰的《大话数据结构》还是严蔚敏经典教材数据结构(C语言版)标题说了这里的代码是可以运行的,但是我们核心代码是需要其他代码来支撑的,如果需要调试请先贴进去必要的代码:这里包括:二叉树的设计、节点的获取和释放、二叉树的遍历(后面会继续写文章单独介绍)有了这些函数,才能保证运行成功:# include <stdio.h># include <s
2020-07-30 16:23:53
1977
原创 线程初识
这里提几个概念:线程:进程内部一条执行路径(序列)进程:一条正在运行的程序多线程:在进程内部又两条及以上的执行路径(同一个进程中,两条路径是可以同时访问同一个变量,使用同一个地址空间)看看图中代码示例:关于图中代码的一些细节说明:①一个进程中,一个线程的结束是不会影响另一个线程的,而我们上图2中的情况就不是因为主线程先结束了导致子线程结束,而是因为主函数中exit(0)导致整个...
2019-11-23 17:41:19
88
原创 定义多个信号量实例—输入的同时输出(练习如何定义信号量个数和初始值)
这是文件sem.h#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <string.h>#include <assert.h>#include <sys/sem.h>union semun{ int val;};void ...
2019-11-23 17:11:05
3076
原创 进程间通信之共享内存实例
我们这里不再提基础的知识,谈一下应用。共享内存:该图来自于《Linux程序设计》,可以看出共享内存就是如其名,两个进程映射到的物理内存是同一个。下面就有一个例子来使用使用共享内存呗这是函数shmmain.c# include <string.h># include <stdio.h># inculde <stdlib.h># include...
2019-11-17 15:55:36
1193
原创 Linux中自建bash部分功能(mybash)
我们知道:管理整个计算机硬件的其实是操作系统的核心 (kernel),这个 核心是需要被保护的! 所以我们一般使用者是透过 shell 来跟核心沟通的,让核心达到我们所想要达到的工作。 那么系统有多少 shell 可用呢?那么bash又是什么啊?既然shell是作为用户与Linux系统间接口的一个程序,那么bash又是啥?其实在Linux中是允许安装多个shell的,我们可以挑选一种自己喜欢的s...
2019-11-08 17:37:58
480
原创 二维数组和数组指针
二维数组的基本概念在这里不在多提,即他的定义和特点。先从二维数组的输出来说吧。二维数组的输出int main(){ int arr[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; for(int i=0;i<3;i++) { for(int j=0;j<4;j++) { pri...
2019-09-22 19:57:06
377
原创 Myatoi和Myitoa的实现(字符串转数字和数字转字符串)
1.字符串转数字:理想情况下我们希望的字符串就是“514”或者是“383842389”反正就都是数字,这种情况下怎么来写呢?假如是字符串“514”,正序把他输出变成数字514,定义一个变量,在第一个数字时乘10+加下一个数字以此类推,变量初始值为0,0乘10加5等于5,str++,5在再乘10加1等于51,str++,51乘10加4即514,以此类推。要说明的是:我们还要减去字符零int My...
2019-08-16 14:18:13
813
原创 字符串的拷贝,有效长度,连接及大小比较(数组、指针)
这篇文章我们来学习一下字符串的一些操作:(头文件已省略)1.字符串的拷贝:我们最开始想到的就是传长度循环直接写,把源字符串每个值赋值给目的字符串,代码如下:int main(){ char str1[20]="hello world"; char str2[20]=""; for(int i=0;i<=sizeof(str1)/sizeof(str1[0])...
2019-07-09 17:43:29
953
原创 通过两数交换引入了解指针
首先,两数交换我们通常会想到定义一个临时变量来交换,通常做法的代码如下:#include <stdio.h>int main(){ int a; int b; int tmp; scanf("%d%d",&a,&b); tmp=a; a=b; b=tmp; printf("%d %d\n",a,b);...
2019-07-07 16:15:16
149
原创 根据两数乘积判断所用进制
有这样一个题:在某系统中154=112成立,则系统采用()进制?选项有 5 6 7 8像简单的两数相乘我们可以大致推断出答案。10进制下个位相乘即54=20而题目中个位为2,我们拿选项检验20对谁取余能得到2。很显然答案就是6了。20%2=2。但是像这种题:假设在n进制下,下面等式成立:567*456=150216求n的值选项有 9 10 12 18依照上面的方法我们得到:42%?=6,...
2019-07-02 19:18:30
881
原创 有关数组越界问题
如题,今天记录一下数组的越界问题。从数组的定义开始说起。当我们需要定义多个同类型的变量我们会选择数组。它的定义格式是:**数据类型 数组名 [数组长度]**例如:int a [4]这是一个int类型的名称为a的数组它的长度为4,也就是它有四个可以存放int类数据的“框”。如图,我们刚才定义了四个长度,那就放进去四个数据,这四个元素每一个都带了编号,而这个编号从0开始并非1。元素10的“位置”为0...
2019-06-30 18:00:32
777
原创 猴子吃桃问题
例题来源:谭浩强《C语言程序设计》第五版:习题4.12猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第2天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半多一个。到第10天想再吃时,剩下了一个。求第一天共摘了多少桃子?简单推算一下第10天剩了1个,每天吃前一天一半再多一个,算出第9天剩了4个,反向验证一下,没错。那前一天就是(今天的+...
2019-06-26 23:33:05
271
原创 “水仙花数”和“完数”的实现
例题来源:谭浩强《C语言程序设计》第五版:习题5.8输出所有“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身。例如,153是水仙花数,因为153=1^ 3+ 5^ 3+ 3^3。该题让输出所有水仙花数,首先我们知道它的范围肯定是>100||<1000,这才是三位数。那我们可以这样思考,先写出一个函数判断一个数到底是不是水仙花数,然后再利用这个函数循环一下...
2019-06-25 21:33:51
783
原创 计算Sn=a+aa+aaa+......+aa..aa(n个a)的值及类似题目拓展
例题来源:谭浩强《C语言程序设计》第五版:习题5.5如题,a表示一个数字,n表示a的位数,n由键盘输入。例如:2+22+222+2222+22222(此时a=2,n=5)计算这些相加时,首先应该知道2 22 222 2222 22222从何而来,如何显示?我们发现每次都增一位,前面我们说过了如何取个位(n%10),扔个位(n/0),这里使用了除法,试想,每次多一位是不是可以使用乘法,这个显然是...
2019-06-25 00:08:26
1162
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人