笔记
猿饵块
这个作者很懒,什么都没留下…
展开
-
2021-10-18
单工,半双工,全双工单工通信:只允许数据在一个方向上传输半双工通信:数据可以在两个方向上传输,但是同一时间只允许有一个方向上的数据传输全双工通信:同一时间可以在两个方向上传输数据...原创 2021-10-18 09:37:14 · 53 阅读 · 0 评论 -
内存泄露和内存溢出
内存泄露:程序员开辟了堆区内存使用,使用之后未释放,导致这块内存不能被使用,就称内存泄露内存溢出:1、申请的内存,系统给的不够,给少了2、申请小内存,却把占据比这个内存更大的数据放入这个内存。eg:申请int 大小的内存 ,放入long大小的数据....原创 2021-10-14 14:45:06 · 47 阅读 · 0 评论 -
面向对象和面向过程
面向对象和面向过程:面向过程:为了实现某个目标 设计者需要自己一步一步的去完成,面向过程适合于小型项目的运用面向对象:为了实现某个目标,设计者设计一个或者多个对象去完成目标,面向对象适合于大型项目的实现...原创 2021-10-13 08:47:43 · 40 阅读 · 0 评论 -
文件操作函数
文件操作的函数:fopen:函数原型:FILE * fopen(const char * path, const char * mode);返回值:文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回 NULL,并把错误代码存在error中。一般而言,打开文件后会做一些文件读取或写入的动作,若打开文件失败,接下来的读写动作也无法顺利进行,所以一般在 fopen() 后作错误判断及处理。fclose:原型:int fclose(FILE*f);返回值:对于输出流,fclose函数原创 2021-10-12 17:44:50 · 91 阅读 · 0 评论 -
const的运用
const的运用1、如果类的成员函数后面加了const关键字,说明这个函数是不能改变类中的成员变量的2、形参前加const,表示形参不能被改变原创 2021-10-12 13:35:16 · 72 阅读 · 0 评论 -
sscanf和sprintf
sscanf和sprintf:sscanf参考: https://blog.csdn.net/zhouwei1221q/article/details/44890617?utm_source=app&app_version=4.15.0&code=app_1562916241&uLinkId=usr1mkqgl919blenintsprintf( char *buffer, const char *format [, argument,…] );sprintf的第一个参数是目的原创 2021-10-12 08:51:12 · 197 阅读 · 0 评论 -
用来动态分配内存的方法
可用来动态分配内存的方法:malloc(size)、malloc只能申请空间,不会自动置0newcalloc(num,bite)、参数num开辟的内存个数,参数2每个内存占多少字节,开辟的字节空间被置0realloc(p,size)、对已经开辟了的空间做修改,再次开辟一个空间,第一个参数是原有空间首地址,第二个参数是要开辟的新空间大小,不会自动置0.(首先在原有空间后面查看空闲空间,如果空闲空间足够大,直接开辟原有空间和后续空间,返回新空间首地址,此时首地址和原有空间首地址相同)(如果后续空间不够原创 2021-10-12 08:40:59 · 459 阅读 · 0 评论 -
sizeof和strlen计算形参的问题
sizeof和strlen计算形参的问题strlen运行的原理是,函数一直会往后遍历,直到遇到\0或者开辟的内存结束sizeof运行的原理是,函数只会计算指定大小的内存空间的字节大小,不会自动往后遍历。所以在生成数字的函数区域内,数组名的值是数组首元素的地址,但是数组所具有的编程意义是这个连续的地址空间,所以在本区域内对数组名的操作就是对整个连续空间的操作。但是当数组名作为参数传递进入子函数中时,是通过复制数组名地址的形式传递的一个指针,这个指针在子函数中就只是一个指针 不再是数组名,所以不具有连续原创 2021-10-11 22:39:51 · 364 阅读 · 0 评论 -
strlen,sizeof计算字符数组
strlen,sizeof–字符数组char str2[100]=“dfuvjd\0vfje”;char str3[]={‘d’,‘d’,‘d’,’\0’,‘b’,‘v’};printf("%s\n",str1);printf("%s\n",str2);printf("%s\n",str3);虽然两个数组的编程方式不同,但是两个数组存储的底层原理都是一段连续的内存strlen()对这两个数组的操作方式都一样,遇到\0就停止。sizeof()对这两个数组也是一样的操作,与\0无关,有多少字节就原创 2021-10-11 22:10:19 · 347 阅读 · 0 评论 -
格式字符
原创 2021-10-11 18:17:22 · 97 阅读 · 0 评论 -
指针的步长
指针的步长eg:就是各种类型的指针加1就是地址增加对应数据类型所占的字节数。int* p=NULL;p=p+1;p就指向8。int类型指针以4字节为单位增加地址char类型指针以1字节为单位增加地址原创 2021-10-11 18:16:01 · 82 阅读 · 0 评论 -
指针的非法操作
指针的非法操作1、对空指针和野指针进行操作,包括赋值,把空指针和野指针变量作为实参传递2、对于赋予十六进制地址的指针也不能操作:int* p=0x32222;空指针可以重复释放(但是也也没有意义)野指针不能重复释放...原创 2021-10-11 17:59:24 · 668 阅读 · 0 评论 -
数据类型和抽象数据类型
数据类型和抽象数据类型:数据类型:就是编程语言里的int等等数据类型抽象数据类型:用户自己定义的数据类型,比如结构体。原创 2021-10-11 16:50:53 · 571 阅读 · 0 评论 -
变量(参数)传递
变量(参数)传递变量可以在本函数和子函数中运用,但是不可以在父函数中运用。原创 2021-10-11 15:25:47 · 152 阅读 · 0 评论 -
C/C++指针字节
C/C++指针字节c/C++中无论是什么类型的指针,每一个指针变量都占据8字节的内存,指针和每一种数据类型占据多少字节无关原创 2021-10-11 15:10:28 · 197 阅读 · 0 评论 -
虚拟内存和数据存储
虚拟内存=用户空间+内存空间用户空间:原创 2021-10-07 23:47:32 · 191 阅读 · 0 评论 -
namespace
C++ namespace 的使用:namespace(命名空间),用户可以用namespace关键字定义不同的命名空间,来防止某些函数,类,模板等的冲突(重复)。大型程序往往会使用多个独立开发的库,这些库又会定义大量的全局名字,如类、函数和模板等。当应用程序用到多个供应商提供的库时,不可避免地会发生某些名字相互冲突(重复)的情况。多个库将名字放置在全局命名空间中将引发命名空间污染(namespace pollution)。更多细节可参考:https://blog.csdn.net/fengbin原创 2021-10-06 19:51:41 · 186 阅读 · 0 评论 -
C++中类的常量成员函数
C++中类的常量成员函数:在C+中,为了禁止成员函数修改数据成员的值,可以将它设置为常量成员函数。设置常量成员函数的方法是在函数原型的后面加上const,形式如下:class x {……………T f(t1,t2) const{}…………};常量成员函数的作用:将成员函数设置为const,表明该成员函数不会修改任何数据成员的值。...原创 2021-10-01 23:06:33 · 401 阅读 · 0 评论 -
内联函数
内联函数(inline):实现:在调用内联函数的地方用内联函数函数体替换跑到子函数中的调用。内联函数的好处:内联函数不需要建立函数调用时的运行环境,不需要进行参数传递,使得程序执行快 效率高。内联函数的缺点:因为要进行代码替换,需要占用更多的存储空间内联函数只适用代码两少的函数,代码多的函数不益用内联函数。有一下情况不益用内联函数:递归函数,有循环的函数,有switch,goto之类复杂结构的函数...原创 2021-10-01 22:57:17 · 60 阅读 · 0 评论 -
nee,delete和malloc,free的区别
new, delete和malloc, free 的区别在C+程序中,仍然可以使用malloc、 free进行动态存储空间的管理,但它们没有用new.delete方便。主要体现在以下几方面。①new能够自动计算要分配的内存大小,不必用sizeot)计算所要分配的内存字节数,减少了出错的可能性。②new不需要进行类型转换,能够自动返回正确的指针类型。③new可以对分配的内存进行初始化。(用())④new和delete可以被重载,程序员可以借此扩展new和delete的功能,建立自定义的存储分配系原创 2021-10-01 22:43:34 · 88 阅读 · 0 评论 -
流的概念
流的概念:多数情况下,流都是从源设备到目标设备的字符序列。(流就是字符序列)因为这些字符序列如同河流一样从源设备连续不断地流向目标设备,所以称为流。输入流:从输入设备流向内存的字符序列输出流:从内存流向输出设备的字符序列...原创 2021-10-01 22:10:48 · 109 阅读 · 0 评论 -
TCP/IP四层模型及功能
TCP/IP协议族各层功能:《》阔起来的是一个数据包传输都过程A:发送端1、应用层:应用层协议:http、DNS、ftp、smtp、ssh等《 应用层决定这次通信的应用类型和要进行什么工作,比如说HTTP、FTP、DNS、SMTP等等,通俗来讲,应用层决定这一次通信要干嘛。 》2、传输层:拥有的协议:TCP、UDP。这两个协议定义了网络数据传输的方式。《传输层把来自应用层的数据报文进行分割,并在每一个分割好的报文上加上自己的头部(包括序号和端口号)形成TCP报文段,然后传输给网络层。》原创 2021-10-01 15:55:51 · 6466 阅读 · 0 评论 -
c++拷贝构造函数
C++拷贝构造函数:复制构造函数复制构造函数是构造函数的一种,也称拷贝构造函数,它只有一个参数,参数类型是本类的引用。复制构造函数的参数可以是 const 引用,也可以是非 const 引用。 一般使用前者,这样既能以常量对象(初始化后值不能改变的对象)作为参数,也能以非常量对象作为参数去初始化其他对象。一个类中写两个复制构造函数,一个的参数是 const 引用,另一个的参数是非 const 引用,也是可以的。如果类的设计者不写复制构造函数,编译器就会自动生成复制构造函数。大多数情况下,其作用是实原创 2021-09-30 20:59:07 · 220 阅读 · 0 评论 -
C++中class和struct
C++中class和struct唯一的区别在于属性的默认的访问权限不同struct默认为publicclass默认为private原创 2021-09-30 20:40:25 · 58 阅读 · 0 评论 -
C++函数重载
C++ 函数重载:满足条件:1:作用域相同,2:函数名相同,3:函数参数类型/参数个数/参数顺序不同注意函数的返回类型不可以作为函数重载的条件引用作为重载的条件1,void func(int &a){}2,void func(const int &a){}int a=100;func(a)—>调用1func(100)—>调用2(传递常量,调用常量形参函数)...原创 2021-09-30 20:38:32 · 107 阅读 · 0 评论 -
C++ 占位参数
C++ 占位参数:形式:在形参中只有数据类型,没有变量名占位参数一定要有实参的传递占位参数也可以拥有默认值,此时可以不传实参int getNum(int a,int=10){}原创 2021-09-30 20:34:45 · 565 阅读 · 1 评论 -
C++ 函数默认值
C++ 函数默认值:1,函数形参可以拥有默认值(C不可以)int getNum(int num1=100,int num2){}2,实参个数可以少于形参个数有实参以实参为准,无实参,以形参为准3,如果某个参数有了默认值,则这个参数之后的参数都要拥有默认值4,如果函数声明有默认值,则定义就不可以有默认值,否则就是重定义...原创 2021-09-30 20:32:48 · 273 阅读 · 0 评论 -
C++ new的运用
C++ new的运用:new:1:int *p=new int (10);开辟一个整型内存大小的地址赋给指针p,再将10赋给指针2:int *p=new int[10];开辟10个int型的地址,并把这10个int类型大小的地址的首地址赋给指针pnew出来的指针的释放:delate[] array; /delate array[];...原创 2021-09-30 20:29:11 · 137 阅读 · 0 评论 -
C++空指针和野指针
C++空指针和野指针:空指针:即被初始化为NULL的指针(注意:C++中,将0、’\0’、3-3赋给一个指针变量都是让其成为空指针),“野指针”的成因主要有两种:1)指针变量没有被初始化。任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的,它会乱指一气。所以,指针变量在创建的同时应当被初始化,要么将指针设置为NULL,要么让它指向合法的内存。例如:char *p = NULL;char *str = (char *) malloc(100);2)指针p被free或者delete原创 2021-09-30 20:14:02 · 399 阅读 · 0 评论 -
str开头系列函数
str开头系列函数:strpbrk()函数原型:extern char *strpbrk(char *str1, char *str2)参数说明:str1为进程搜索的字符串,str2为要搜索的字符串。 所在库名:#include <string.h> 函数功能:比较字符串str1和str2中是否有相同的字符,如果有,则返回该字符在str1中的位置的指针,如果没有返回NULL。strcasecmp()1.功能:忽略大小写比较字符串2.头文件《string.h》3. 函数说明 strc原创 2021-09-30 10:57:07 · 283 阅读 · 0 评论 -
有限状态机
有限状态机:含义:状态机就是进行状态判定和处理数据的函数,有限就是要操作的状态是有限的个数。所以有限状态机就是对有限个状态进行处理的函数。更多细节可以参考:https://glumes.com/post/android/understand-state-machine/...原创 2021-09-30 09:43:30 · 105 阅读 · 0 评论 -
服务器开发两种并发编程模式
服务器的两种并发编程模式:1:半同步/半异步模式:工作模式:主线程只负责监听sockfd,连接和客户处理都由工作线程完成,每个线程(主线程和工作线程)都有自己的事件循环(都有自己的事件表)。每个线程都工作在异步模式。半同步/半异步中的“同步”,“异步”和I/O模型中的同步和异步是不同的概念。在并发编程中,“同步”是指,指定了要处理哪个事件,就不能先处理其他的事件,必须要把这个事件处理完,才能处理其他事件。“异步”是指可以同时等待处理多个事件,谁准备好了,就处理谁。比方说:你去商城买东西,你看上了一款原创 2021-09-29 22:53:27 · 166 阅读 · 0 评论 -
两种高效的事件处理模式
两种高效的事件处理模式:•同步I/O模型通常用于实现Reactor模式•异步I/O模型则用于实现Proactor模式Reactor—反应堆Reactor模式:原理:这种模式的要求是主线程(I/O处理单元)监听文件描述符上是否有事件发生,有事件发生就立即将该事件通知工作线程。主线程只负责监听文件描述符上是否有事件发生,不做其他的工作;工作线程负责其他工作,如接受连接,读写数据等。Proactor模式:原理:相比于Reactor模式,Proactor模式下主线程要比较辛苦,主线程要执行数据读写操原创 2021-09-29 17:09:15 · 151 阅读 · 0 评论 -
数据结构=逻辑结构+存储结构
数据结构=逻辑结构+存储结构逻辑结构:集合结构,线性结构,树结构,网状结构。存储结构:1.顺序存储结构 :所有元素依次存放在连续的存储空间2.链式存储结构:如同链表一样,无需要求元素之间连续存储,只需每个结点有指针字段用于存放后继元素的首地址即可。...原创 2021-09-27 22:20:06 · 160 阅读 · 0 评论 -
C++进程创建和使用原理
C++进程创建和使用原理•C++ linux下进程创建C++linux下创建子进程的系统调用是fork,每次调用fork都返回两次,在父进程返回子进程PID,在子进程中返回0,所以程序可以根据PID的返回值进入子进程或者父进程。•子进程和父进程的内容因为fork复制当前进程(父进程)去创建子进程,所以子进程与父进程代码完全相同,而且子进程一些属性和父进程相同,一些属性和父进程不同(PPID,信号处理函数只在父进程有用)•子进程和父进程的运行因为进程之间的运行方式是(伪)并发运行,而并发运行的真正原理原创 2021-09-26 10:07:28 · 834 阅读 · 0 评论 -
exec函数族讲解
exec函数族讲解用来在进程中(一般是子进程)执行其他文件的程序,即从调用exec函数的位置把当前进程映像替换为exec指定的程序的进程映像,去执行替换后的进程,被替换的进程不执行。extern char** environ;int execl(const char *path, const char *arg, …); int execlp(const char *file, const char *arg, …); int execle(const char *path, const char *ar原创 2021-09-25 23:24:54 · 56 阅读 · 0 评论 -
什么是进程映像
进程映像也叫做进程图像,包括处理机中各通用寄存器的值,进程的内存映像,打开文件的状态和进程占用资源的信息等。它是一个内存级的实体并由:进程控制块(PCB)、进程执行的程序(code) / 程序、进程执行时所用的数据 / 数据集合、进程执行时使用的工作区组成。## 什么是进程映像...原创 2021-09-25 22:57:32 · 3870 阅读 · 0 评论 -
CGI服务器原理:
利用重定向技术将标准输入,标准输出或者其他文件的文件描述符重定向到网络连接中,这样就可以通过标准输入,标准输出 文件描述符直接从网络连接中读取数据和直接发送数据,而无需再利用IO接口读取和发送数据## CGI服务器原理:...原创 2021-09-25 20:11:04 · 159 阅读 · 0 评论 -
C++ this指针原理及运用
原理:this指针是由编译器自动添加到非静态成员函数中的隐含参数,所以称“隐式指针”。当在类的非静态成员函数中访问类的非静态成员的时候(注:类中非静态成员函数才有this指针,static修饰的静态成员函数没有this指针),编译器会自动将对象本身的地址作为一个隐含参数付给this指针传递给函数,函数通过这个this指针也就是对象地址来引用地址对应的对象,并在此函数中对该对象进行操作。运用:1:返回对象本身:return *this;2:当参数和类的成员变量名相同时,用this指针来区分开参数和类的成原创 2021-09-25 14:11:34 · 334 阅读 · 0 评论