动静态库、软硬链接 动静态库1.概念2.打包动静态库①.打包静态库静态库使用②.打包动态库1.概念我们平时在写代码时总会包一批头文件,然后就可以使用库中的一些函数。linux下,如果在编译时不带任何选项默认使用的是动态库,如果带static选项使用的是静态库。编译一个简单的hello world程序#include <stdio.h> int main() { printf("hello world!");
string实现 #pragma once#include <iostream>#include <string.h>#include <assert.h>using namespace std;namespace zjp{class string{public: typedef char* iterator;public: void swap(string& str) { std::swap(_str, str._s
基础I/O、系统级I/O 基础I/O1.系统级别I/O①基本概念②系统调用接口2.文件描述符什么是文件描述符①默认打开的文件②文件描述符分配规则3.重定向dup2系统调用1.系统级别I/O①基本概念在c语言中我们已经知道c有基本的打开文件,关闭文件的 fopen(), fclose() ,以及向文件写入内容的fwrite()和从文件读取内容的fread()等一些函数,但是函数都是语言层面上的,事实上它内部是调用的一些操作系统提供的接口,再加上c语言的缓冲区。那要真正了解文件的使用,学习系统级别的I/O是必须的。②系统调用接口
进程替换、写一个简单的shell程序 进程替换进程替换进程替换概念替换函数替换函数的简单使用写一个shell程序进程替换进程替换概念进程替换意思就是,让一个进程替换另一个进程。Linux系统提供一系列接口来实现进程替换。需要注意的是,进程替换仅仅是当前进程在磁盘中的程序文件被另一个进程的程序替换,而内存中的pcb并没有替换,也就是说进程替换不创建新进程,而是让老进程执行新的代码。替换函数Linux提供了多个替换函数但是本质都是一样的,仅仅是使用方式不同。int execl(const char *path, const char *
C++模板 模板1.模板定义2.模板分类1.函数模板1.函数模板定义2.多个实参类型不同的情况3.函数模板原理--模板实例化2.类模板1.类模板定义1.模板定义模板是对类型进行参数化的工具。template <class T>template <typename T>template、class、typename均是c++中的关键字,上述两种定义方式作用相同。2.模板分类1.函数模板1.函数模板定义template <class T>
Linux进程控制---进程创建、进程终止、进程等待、进程替换 进程控制1.进程创建1.父子进程代码共享2.父子进程数据独立2.进程终止1.终止方式2.return3._exit4.exit()3.进程等待4.进程替换1.进程创建给父进程创建一个子进程,父子进程代码数据独立代码共享。函数:fork() 返回值是 int1.父子进程代码共享fork()函数有两个返回值,调用函数创建进程的大体过程是这样的。父进程接收到返回值是子进程的pid,子进程接收到的返回值是0。int main() { pid_t id = fork();
C++内存管理(new、delete、operator new、operator delete、定位new) C++内存管理1.new和delete使用①new单个和多个变量②delete2.new和delete底层原理---operator new。①operator new 和 malloc关系②operator delete 和 free关系3.定位new用法4.1.new和delete使用①new单个和多个变量②delete2.new和delete底层原理—operator new。①operator new 和 malloc关系②operator delete 和 free关系3.定位new
c++类和对象(初始化列表、explicit、static修饰成员、友元、内部类) 类和对象1.初始化列表1.来源2.概念3.为什么要有初始化列表2.explicit作用3.static关键字1.static修饰成员变量2.static修饰成员函数4.友元1.初始化列表1.来源c++类中的构造函数,可以在实例化对象时初始化对象的成员变量的值,实际上它的初始化过程是在对象定义出来后,再进行的赋值。就类似于这样int i; i = 1; 而初始化列表是这样的效果int i = 1;显然初始化列表才能真正意义上称之为初始化。2.概念以一个冒号开始,接着是一个以逗号分隔的数
c语言整形提升和算术转换 整形提升和算术转换隐式类型转换(整形提升)算术转换赋值运算符类型转换正常表达式类型转换函数调用类型转换强制类型转换总结隐式类型转换(整形提升)char类型和short类型的变量在表达式中运算时会发生整形提升变成int类型。整形提升的方式:1.无符号数高位补0。2.有符号数高位补符号位。即:正数高位补0,负数高位补1。 char a; char b = 10; char c = 20; a = b + c; // 表达式中b和c先转换成int类型,再进行运算 //最后将运算结果截断
Linux基础开发工具——vim入门 vim 中有12种甚至更多模式,在不同模式下可以做不同的事,但入门的时候我们只用了解其三种模式即可进行最基本的代码编写了。vim入门正常模式(命令模式)1.移动光标页操作行操作2.删除文字3.复制4.替换5.撤销6.更改7.跳至指定行插入模式底行模式查找字符正常模式(命令模式)使用vim刚打开一个文件时就是正常模式,在别的模式下狂按ESC键也可以进入正常模式,在该模式下所有的输入都是指令。命令是区分大小写的。1.移动光标页操作1.k,j,h,l:vim中上下左右移动光标可以按键盘的上下左右键,更
Linux进程(进程概念、特征、状态、优先级、进程地址空间、环境变量) 进程进程概念进程的特征程序和进程的差别进程控制块1.进程的组成2.Linux中进程相关指令进程的状态进程概念进程程序的一个执行实例,正在执行的程序。它是可执行程序关于数据集合的一次运行活动。内核观点:进程是分配系统资源(CPU时间,内存)的实体的运行过程。是系统资源分配、调度的基本单位。程序文件加载到内存就变成了进程。进程的特征1.动态性。进程是程序的一次执行,它有着创建、活动、暂停、终止等过程,具有一定的生命周期,是动态地产生、变化和消亡的。动态性是进程最基本的特征。2.并发性。指多个进程
C++构造函数、析构函数、拷贝构造函数、赋值运算符重载 类中四个常见的函数1.构造函数1.概念2.特性和使用析构函数1.概念2.特性1.构造函数我们在用类实例化处对象后总是要自己对它进行初始化,有时还会忘记初始化,这样会造成不必要的麻烦。构造函数可以实现在类实例化出对象后自动初始化成员变量。1.概念构造函数是一个特殊的成员函数,名字与类名相同,类实例化时由编译器自动调用,保证每个数据成员都有 一个合适的初始值,并且在对象的生命周期内只调用一次。2.特性和使用1.构造函数有形参,函数名必须和类名相同。2.构造函数没有返回值。3.构造函数只能在类当中
C++——类和对象 类和对象类1.类的引入2.类的定义3.类的访问限定符4.类的实例化(对象)5.类的大小(结构体内存对齐)6.隐含的this指针类1.类的引入c语言有结构体的概念,结构体中可以包含多个成员变量它封装了一个变量的各种属性。c++中也有结构体,与c语言不同的是它不仅包含成员变量还有成员函数。2.类的定义c++中的类可以用struct定义,多数情况下用class来定义。class student{ //成员 //成员变量 int _name; int _age; int _score;
c++内敛函数、auto关键字、范围for循环 内敛函数内敛函数1.为什么有内敛函数2.内敛函数使用3.内联函数特性、注意事项4.宏函数的优缺点auto关键字1.auto 的定义2.auto的使用3.auto使用注意事项4.auto使用细则范围for循环1.范围for循环的使用规范2.范围for循环的使用条件内敛函数1.为什么有内敛函数c语言库中的许多函数都是用宏函数来写的,主要原因调用函数会有参数压栈建立栈帧的消耗,宏函数是替换原来的函数,省去了建立栈帧的开销,提高了效率。但是宏函数很难阅读,不便维护。c++中为了解决这一问题引入了内敛函数的概
Linux——文件权限理解、切换用户 Linux下有两种用户:超级用户、普通用户。区别:超级用户:可以在Linux下做任何事情,不受系统限制。普通用户:只能做有限的事,受系统限制。切换用户:su [用户名]1.普通用户切换超级用户[zjp@VM-0-4-centos ~]$ su rootPassword: //普通用户切换到超级用户需要输入密码2.超级用户切换普通用户[root@VM-0-4-centos zjp]# su zjp //超级用户切换到普通用户不需要输入密码1.Li
C++——引用 引用1.引用的定义引用就是对另一个变量起别名,它仅仅是一个别名,编译器不会为它开辟内存空间,它和这个变量共用一个内存空间。int& b = a; 是定义引用。int& 是引用类型a,b共用一个内存空间,对一个的值改变另一个值也会改变。2.引用的特性1.定义一个引用必须要初始化(即要指明是哪个变量的引用)。2.一个变量可以有多个引用。3.一个引用只能对应一个实体,不能再引用其它实体。3.常引用当变量是const修饰后的常变量时,它的引用也必须要用const修饰后。
C++缺省参数和函数重载 缺省参数1.什么是缺省参数c++允许在函数声明或定义的时候给参数指定默认值,这样就可以做到在调用该函数时如果传参数,形参的值就是实参的值;如果不传参数那么形参的值就是指定的默认值。缺省参数分为全缺省和半缺省全缺省//所有形参都指定了一个值int Add(int x = 1, int y = 2, int z = 3){ return x + y + z;}int main(){ printf("%d", Add()); return 0;}半缺省int Add
C++入门,namespace关键字 用c++写一段"hello world"#include <iostream>using namespace std;int main(){ printf("hello world"); return 0;}namespace关键字C++有namespace关键字的原因namespace是对c语言的一个补充,在用C写大型项目需要多人合作的时候,很有可能会出现几个人定义的全局变量或函数出现命名冲突的情况,那这时就很难受了。而在C++的namespace这个关键字就很
快速排序递归实现 快排思路绝大多数树的排序算法,都可以先理解每趟排序然后再理解多趟排序,快速排序也不例外。下面我将介绍快速排序中单趟排序的三个方法及思路,分别是 左右指针法,挖坑法,前后指针法。1.左右指针法快速排序的每一趟都是为了找出值为key的元素的正确位置。而key是一个随机的元素值。left是从左往右走找比key大的,right是从右往左走找比key小的。然后交换两个元素的值。多次寻找后,最终left和right相遇将相遇位置的元素和key的交换,这样就找到key的正确位置,key的坐左边元素都小