自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 构造函数和初始化列表的执行顺序

先执行基类初始化列表,再执行基类的构造函数,再执行派生类参数初始化列表,再执行派生类的构造函数内。代码如下:#include <iostream>using namespace std;#include <iostream>#include <string>using namespace std;class Bound { public: Bound(int line) { cout<<"Bo

2021-10-04 21:19:12 1029

原创 fread函数使用

#include <stdio.h>int main(int argc, const char *argv[]){ char b[10]; FILE *fp = fopen("C:\\Users\\j30008655\\Desktop\\kexin_testcode\\testet\\fread_test\\bin\\test.bin","rb"); size_t ret_code = fread(b, 10, 1, fp); if(ret_code =.

2021-02-03 15:32:55 314

原创 字符串数组初始化

int main(int argc, const char *argv[]){ char *strs[] = {"dog","racecar","car"}; printf("%s\n", strs[1]); int len = strlen(strs[1]); printf("len = %d", len); return 0;}/*> Executing task: .\bin\demon.exe <racecarlen =.

2021-01-30 20:43:14 408 1

原创 C语言字符串赋值给数组/char *

字符串(c语言):以“abcd”为例,解释如下:1. 申请了空间(在常量区),存放了字符串2. 在字符串尾加上了'/0'3. 返回地址一定记清楚!!1. 字符串赋值给char * int main(int argc, const char *argv[]){ char *p1 = "hello"; printf("p1[0] = %c\n", *p1); printf("%s\n", p1); char *p2 = NULL;...

2021-01-27 19:22:20 22124 5

原创 静态库和动态库

定义:静态库:这类库的名字一般是libxxx.a,xxx为库的名字。利用静态函数库编译成的文件比较大,因为整个函数库的所有数据都会被整合进目标代码中,他的优点就显而易见了,即编译后的执行程序不需要外部的函数库支持,因为所有使用的函数都已经被编译进去了。当然这也会成为他的缺点,因为如果静态函数库改变了,那么你的程序必须重新编译。动态库:这类库的名字一般是libxxx.M.N.so,同样的xxx为库的名字,M是库的主版本号,N是库的副版本号。当然也可以不要版本号,但名字必须有。相对.

2021-01-25 18:46:05 647

原创 vector的 capacity / size / shrink_to_fit 函数使用(上代码看结果)

#include <iostream>#include <vector>int main(int argc, const char *argv[]){ int sz = 200; std::vector<int> v1; auto cap = v1.capacity(); std::cout << "initial capacity=" << cap << '\n'; for (.

2021-01-22 10:30:38 242

原创 C++头文件与C头文件(math/string)

math“math.h”是C语言中数学函数库,包含我们常用的一些数学计算上会使用到的函数。C++中有对应相同作用的头文件“cmath”,当然C++中两个头文件都可以使用,C++向C兼容。string1. #include <string.h>C语言的头文件,包含比如strcpy之类的字符串处理函数。注意C语言里没有string类的概念,不要弄混。2. #include <string>C++的头文件,包含std::string的定义,属于STL范畴..

2021-01-22 09:56:40 1190

原创 静态全局变量和全局变量

静态全局变量和全局变量的区别:全局变量(外部变量)的说明之前再冠以static就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。这两者的区别在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函.

2021-01-22 09:48:32 1187

原创 C/C++函数传参

在C语言中我们的解决方案:如果不想修改我们就直接传递实参,如果对象太大我们就传递指针,并且声明指针是指向const对象的;如果想修改实参的值,我们只能传递实参的指针,然而此时指针就不能用const修饰了。在C++中,我们仍然可以使用C中的方式,然而也可以使用“引用”方式:如果不想修改实参的值,我们使用const引用(就是“常量引用”)方式,这样就不可以通过引用修改被引用对象的值;如果想修改实参的值,则使用平常性的引用实参就可以了...

2021-01-22 09:38:35 68

原创 一个class的大小计算

1. 空类class A{};void main(){ printf("sizeof(A): %d\n", sizeof(A)); getchar();}得到结果为:1。类的实例化就是给每个实例在内存中分配一块地址。空类被实例化时,会由编译器隐含的添加一个字节。所以空类的size为1。2.虚函数class A{ virtual void FuncA();<br> virtual void FuncB();};得到结果:...

2021-01-22 09:35:10 493

原创 C中自动加“\0“的情况

一、‘\0’ 的本质:'\0'就是8位的00000000,因为字符类型中并没有对应的这个字符,所以这么写。'\0'就是 字符串结束标志。'\0'是转译字符,意思是告诉编译器,这不是字符0,而是空字符。空字符\0对应的二进制为00000000,而数字0为00110000原来,在C语言中没有专门的字符串变量,通常用一个字符数组来存放一个字符串。字符串总是以'\0'作为串的结束符。因此当把一个字符串存入一个数组时,也把结束符 '\0'存入数组,并以此作为该字符串是否结束的标志。有了'\0'标志后,.

2020-12-21 14:30:32 3115

转载 socket()函数用法详解:创建套接字

socket()函数用法详解:创建套接字不管是 Windows 还是 Linux,都使用socket() 函数来创建套接字。socket() 在两个平台下的参数是相同的,不同的是返回值。在《socket是什么》一节中我们讲到了 Windows 和 Linux 在对待 socket 方面的区别。Linux 中的一切都是文件,每个文件都有一个整数类型的文件描述符;socket 也是一个文件,也有文件描述符。使用 socket() 函数创建套接字以后,返回值就是一个 int 类型的文件描述符。Wind.

2020-12-03 11:03:35 1012

原创 TCP套接字----半队列连接和全队列连接

我们知道当服务器绑定、监听了指定端口后,内核通常会为每一个LISTEN状态的socket维护两个队列:SYN队列(半连接队列):由/proc/sys/net/ipv4/tcp_max_syn_backlog指定,表示处于 SYN_RECV 状态的队列 ACCEPT队列(全连接队列):由listen()函数的第二个参数 backlog 指定,内核硬限制由 net.core.somaxconn 限制,即实际的值由min(backlog,somaxconn) 来决定。表示已完成连接的队列,等待被 accep

2020-12-03 11:03:15 223

转载 套接字类型

这个世界上有很多种套接字(socket),比如 DARPA Internet 地址(Internet 套接字)、本地节点的路径名(Unix套接字)、CCITT X.25地址(X.25 套接字)等。但本教程只讲第一种套接字——Internet 套接字,它是最具代表性的,也是最经典最常用的。以后我们提及套接字,指的都是 Internet 套接字。根据数据的传输方式,可以将 Internet 套接字分成两种类型。通过 socket() 函数创建连接时,必须告诉它使用哪种数据传输方式。Internet ...

2020-12-03 11:02:56 212

原创 “并发” 与 “并行” 概念理解

个人理解总结: 并发指多进程或多线程在逻辑上的同时运行;并行是并发的真子集,即多进程或多线程在真正意义上独立运行在不同的CPU上; 并发与CPU个数无关,单CPU存在并发,多CPU也存在并发的情况; 网络搜集理解如下: 深入理解计算机系统CSAPP的回答。 并发:是说进程B的开始时间是在进程A的开始时间与结束时间之间,我们就说A和B是并发的。 并行:是并发的真子集,指同一时间两个进程运行在不同的机器上或者同一个机器不同的核心上。 只有当CPU至少有两个核心的时候才有可能并..

2020-12-03 11:02:38 859

原创 并行和并发的区别

并行和并发的区别并发:并发(Concurrent),在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行。并发不是真正意义上的“同时进行”,只是CPU把一个时间段划分成几个时间片段(时间区间),然后在这几个时间区间之间来回切换,由于CPU处理的速度非常快,只要时间间隔处理得当,即可让用户感觉是多个应用程序同时在进行。如:打游戏和听音乐两件事情在同一个时间段内都是在同一台电脑上完成了从开始到结束的动作。那么,就可以说听音乐和打游戏是并发的。

2020-12-03 11:02:16 94

原创 TCP/IP协议族

上节《OSI网络七层模型简明教程》中讲到,目前实际使用的网络模型是 TCP/IP 模型,它对 OSI 模型进行了简化,只包含了四层,从上到下分别是应用层、传输层、网络层和链路层(网络接口层),每一层都包含了若干协议。协议(Protocol)就是网络通信过程中的约定或者合同,通信的双方必须都遵守才能正常收发数据。协议有很多种,例如 TCP、UDP、IP 等,通信的双方必须使用同一协议才能通信。协议是一种规范,由计算机组织制定,规定了很多细节,例如,如何建立连接,如何相互识别等。协议仅仅是一种规范,必须由

2020-12-03 11:02:03 86

原创 IP、MAC和端口号——网络通信中确认身份信息的三要素

在茫茫的互联网海洋中,要找到一台计算机非常不容易,有三个要素必须具备,它们分别是IP 地址、MAC 地址和端口号。IP地址IP地址是Internet Protocol Address 的缩写,译为“网际协议地址”。目前大部分软件使用 IPv4 地址,但 IPv6 也正在被人们接受,尤其是在教育网中,已经大量使用。一台计算机可以拥有一个独立的 IP 地址,一个局域网也可以拥有一个独立的 IP 地址(对外就好像只有一台计算机)。对于目前广泛使用 IPv4 地址,它的资源是非常有限的,一台计算机一..

2020-12-03 11:01:44 234

原创 gcc编译—inclue文件和库文件链接

gcc编译器搜索头文件路径 本文介绍在Linux下gcc编译器是如何找到程序中的头文件的。头文件是一种文本文件,使用文本编辑器将代码编写好之后,以扩展名.h保存就行了。头文件中一般放一些重复使用的代码,例如函数声明、变量声明、常数定 义、宏的定义等等。当使用#include语句将头文件引用时,相当于将头文件中所有内容,复制到#include处。1.#include有两种写法形式, 分别是:#include <> : 直接到系统指定的某些目录中去找某些头文件。#in...

2020-12-03 10:56:12 310

原创 new/delete和mallco/free的区别,及malloc详细解释

一、区别其实在使用的大部分场景下,两者是可以通用的,但是我们还是要知道他两的区别。1、malloc与free是c++/c语言的标准函数,new/delete是C++的运算符。2、他们都可用于申请动态内存和释放内存。new/delete比malloc/free更加智能,其实底层也是执行的malloc/free。为啥说new/delete更加的智能?因为new和delete在对象创建的时候自动执行构造函数,对象消亡之前会自动执行析构函数。既然new/delete的功能完全覆盖了malloc和fr

2020-12-03 10:43:44 165

原创 sizeof 和 strlen 结果输出(附图)

直接上输出结果,很明了:需要注意的问题是,sizeof(str3)的结果平台影响,32位系统指针是4字节,64位系统指针是8字节。

2020-12-03 10:38:38 349

转载 void * 指针的使用

指针有两个属性:1)指向变量;2)对象的地址和长度,但是指针只存储地址,长度则取决于指针的类型;编译器根据指针的类型从指针指向的地址向后寻址,指针类型不同则寻址范围也不同,比如:int*从指定地址向后寻找4字节作为变量的存储单元double*从指定地址向后寻找8字节作为变量的存储单元void即“无类型”,void *则为“无类型指针”,可以指向任何数据类型。1 void的作用1)对函数返回的限定a) 当函数不需要返回值时,必须使用void限定。例如: void...

2020-12-01 15:28:43 807

原创 C++ 之const引用使用介绍

const引用定义:a. const :const对象一旦创建后其值就不能改变,const对象必须初始化。b. 引用:是将引用与对象绑定在一起,而不是将对象的值拷贝给引用。引用一旦初始化完成,就无法再让引用和另外一个对象绑定在一起。引用必须初始化。c. const引用:把引用绑定到const对象上,即表示不能通过引用改变绑定对象的值。const引用和非const引用的区别:a.非const引用:要求引用的类型需要和绑定对象严格匹配,引用只能绑定在对象上,不能与字面值或者某个表达式计算结果

2020-10-10 15:27:08 582

原创 IP数据包详解

引言IP提供不可靠,无连接的数据报传送服务。不可靠:意思它不保证IP数据包能成功地到达目的地,IP仅提供尽力而为的传输服务。任何要求的可靠性必须有上层来提供。 无连接:意思是IP并不维护任何关于后续数据报的状态信息,每个数据报的处理都是独立的。IP报数据格式 IP数据包由首部和数据两部分组成,首部由固定部分和可变部分构成,固定部分长度是20个字节,是所有IP数据报必须具有的,可变部分是可选的,长度也是可变的。版本:4bit...

2020-09-16 17:35:21 4658

原创 TCP/IP---四层协议层罗列

TCP/IP是一组不同层次上的多个协议的组合。TCP/IP通常被认为是一个四层协议系统:链路层:又叫数据链路层和网络接口层,通常包括操作系统中的设备驱动程序和网络接口卡。 网络层:有时也叫互联网层,处理分组在网络中的活动。在TCP/IP协议族中,网络层协议包括IP,ICMP,IGMP协议。 运输层:主要为 两台主机上的应用程序提供端到端的通信。在TCP/IP协议族中,运输层协议包含TCP协议和UDP协议。TCP所做的工作包括把应程序交给它的数据分成合适的小块交给下面的网络层,确认收到的分组,设置发送

2020-09-14 15:25:13 473

原创 TCP 和 UDP 可以使用相同的端口号

结论:TCP和UDP可以使用相同的端口号; TCP协议里的端口号必须是唯一的,UDP同理;原因:IP首部中存入一个长度为8bit的数值,称作协议域。1代表ICMP,2代表IGMP,6代表TCP,17代表UDP。系统有能力根据接受的报文的IP字段里面的协议部分判断这个报文是什么报文,就是说,系统读数据的时候还没有读到上层报文的时候已经知道上层是什么报文了,直接交给相关的内核进程或协议栈处理就可以了。而在同一个协议内部端口号唯一。知识拓展:由于TCP,UDP,ICMP和IGMP都要.

2020-09-11 16:51:15 3561

空空如也

空空如也

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

TA关注的人

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