自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 链路层:eth协议,arp协议,mtu

服务:负责相邻设备之间的数据帧传输一个数据从一段主机发出,到达另一端主机上,其中传输层描述了端口表示哪两个进程处理,网络层描述了IP地址,也就是通信两端主机,但是数据无法直接从一段到达另一端,实际传输是通过了很多相邻节点设备之间的传输完成的eth-以太网协议:mac地址:物理硬件地址,是一个网卡在出厂的时候设定的地址(在以前都是不可更改的,但是现在可以)uint8_t mac[6] ,mac地址占据的比特位是48位,用于指定的相邻网卡设备我怎么知道指定相邻的那个设备的mac地址呢?arp-地址解

2022-04-05 15:21:47 2029

原创 C++ 继承

C++继承1.继承的概念及定义1.1继承的概念1.2继承的定义2.基类和派生类对象赋值转换3.继承中的作用域4.派生类的默认成员函数5.继承与友元6.继承与静态成员7.菱形继承1.继承的概念及定义1.1继承的概念继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要手段,它允许程序员在保持原有类的特性的基础上进行扩展,增加功能,这样产生新的类,称为派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。1

2022-01-21 14:59:44 168 2

原创 Linux 进程(二)操作系统 进程状态(僵尸进程) 环境变量 程序地址空间

linux进程(二)1.操作系统2.进程状态3.环境变量4.程序地址空间5.虚拟地址组成1.操作系统概念:软件–管理计算机上的软硬件资源定位:让计算机更加好用讨论:操作系统是如何管理这些软硬件资源的?管理:描述+组织系统调用:操作系统向用户提供的用于访问内核的接口库函数:大佬们针对典型功能的封装接口库函数与系统调用的关系:库函数封装了系统调用接口2.进程状态概念:描述进程当前处于什么状态应该如何被操作系统调度管理种类:就绪,运行,阻塞linux分类:运行态-R:正在运行的,以及拿

2021-12-13 16:17:05 775

原创 Linux 多线程

线程控制一.线程概念1.线程的优点2.线程的缺点3.线程之间的独有与共享:4.多进程与多线程二.线程控制1.线程的创建2.线程的终止3.线程的等待4.线程的分离三.线程安全概念实现互斥锁死锁同步的实现:条件变量生产者与消费者模型四.线程应用一.线程概念线程是进程中的一条执行流程,是CPU调度运行程序的基本单元,linux线程的调度运行通过pcb来实现,因此linux下线程实际上就是一个pcb,而一个进程中又可以有多个pcb,并且共享进程大部分资源,因此线程也被称作轻量级进程。1.线程的优点1.创建

2021-12-12 17:28:23 1122 7

原创 C++ 栈和队列 容器适配器

栈和队列1.stack的介绍和使用2.queue的介绍和使用3.priority_queue的介绍和使用4.容器适配器5.总结1.stack的介绍和使用1.1stack的介绍栈的文档:链接: http://cplusplus.com/reference/stack/stack/?kw=stack.1.stack是一种容器适配器,专门在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。2.stack是作为容器适配器被实现的,容器适配器即是对特定类进行封装作为底层的容器,

2021-12-07 18:31:50 187

原创 C++ vector

C++ vectorvector的介绍及使用vector的模拟实现vector的介绍及使用1.1vector的介绍1 .vector是表示可变大小数组的序列容器。2. 就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。3. 本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小为了增加存储空间。其做法是,分配

2021-12-03 14:33:14 153 2

原创 Linux:基础IO

基础IO库函数IO接口Linux系统调用接口文件描述符-文件流指针重定向原理动态库与静态库的生成与使用库函数IO接口fopen,fwrite,fread,fseek,fcloseFILEfopen(charpathname,char*mode);pathname:文件路径名 mode:文件打开方式系统调用IO接口中并不区分文本和二进制数据,统一按照二进制进行处理,但是库函数不一样,区分文本和二进制,默认文本操作,但是有的文本一个字符占多个字节,例如:一个文件中有十个字节数据,但是读取完毕后大小

2021-11-26 18:36:33 714 1

原创 C++ string类

C++string类一.为什么要学string类二.标准库中的string类三.string类的模拟实现一.为什么要学string类1.C语言中的字符串C语言中,字符串是以\0结尾的一些字符集合,为了操作方便,C标准库中提供了一些str系列的库函数,但是这些库函数与字符串是分开的,不太适合OOP的思想,而且底层空间需要用户自己管理,稍不留神可能还会越界访问。二.标准库中的string类1.string类1.string是表示字符串的字符串类。2.该类的接口与常规容器接口基本相同,在添加了一些专

2021-11-26 17:02:50 605

原创 Linux 进程间通信(IPC)

进程间通信(IPC)**概念:**操作系统为用户提供的用于实现进程之间进行数据通信的多种方式为什么:进程之间是具有独立性的,无法直接通信本质:有一块公共的区域供多个进程同时访问分类:管道,共享内存,消息队列,信号量管道**作用:**用于进程间的数据传输**本质:**内存中的一块缓冲区(内核空间中的一块内存)**分类:**命名管道,匿名管道**匿名管道:**内核中的缓冲区没有标识-仅能用于有亲缘关系 的进程间通信,通过子进程复制父进程的方式获取到管道的操作句柄。

2021-11-18 15:24:02 115 2

原创 STL简介

什么是STLSTL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构和算法的软件框架。STL的版本原始版本Alexander Stepanov、Meng Lee 在惠普实验室完成的原始版本,本着开源精神,他们声明允许任何人任意运用、拷贝、修改、传播、商业使用这些代码,无需付费。唯一的条件就是也需要向原始版本一样做开源使用。 HP 版本–所有STL实现版本的始祖。P. J. 版本由P. J. Pl

2021-11-12 20:19:29 103

原创 C++函数的重载

函数重载的概念函数重载:是函数的一种特殊情况C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数 或 类型 或 顺序)必须不同,常用来处理实现功能类似数据类型不同的问题名字修饰为什么C++支持函数重载,而C语言不支持呢?在C/C++中,一个程序要运行起来,需要经历以下几个阶段:预处理、编译、汇编、链接。实际我们的项目通常是由多个头文件和多个源文件构成,而通过我们C语言阶段学习的编译链接,我们可以知道,【当前a.cpp中调用了b.cpp中定义的Add函数时】

2021-11-02 18:42:44 405

原创 C++命名空间

命名空间在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的。1.命名空间的定义定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员注意:一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中2.命名空间的使用命名空间

2021-11-02 17:14:38 343

原创 泛型编程(一)

泛型编程1,如何实现一个通用的交换函数?使用函数的重载虽然可以实现,但是也有不好的地方:1.重载的函数仅仅是类型不同,代码的复用率较低,只要有新类型出现,就需要增加对应的函数2.代码的可维护性比较低,一个出错可能所有的重载均出错那能否告诉编译器一个模子,让编译器根据不同的类型利用该模子生成代码呢?所以我们就引出了泛型编程泛型编程:编写与类型无关的通用代码,是代码复用的一种手段,模板是泛型编程的基础。模板:1.函数模板2.类模板函数模板函数模板代表了一个函数的家族 ,该函数模板与类型

2021-10-29 13:26:10 91

原创 C++内存管理(一)

C++内存分布这个图很清晰的表明了个成员在内存中的分布【说明】1. 栈又叫堆栈,非静态局部变量/函数参数/返回值等等,栈是向下增长的。2. 内存映射段是高效的I/O映射方式,用于装载一个共享的动态内存库。用户可使用系统接口创建共享共享内存,做进程间通信。(Linux课程如果没学到这块,现在只需要了解一下) 3. 堆用于程序运行时动态内存分配,堆是可以上增长的。4. 数据段–存储全局数据和静态数据。5. 代码段–可执行的代码/只读常量。C++的内存管理方式C语言内存管理方式在C++中可以继续使

2021-10-28 00:52:16 66

原创 Linux进程(一)进程概念

进程的概念程序;一系列有序的指令集合(就是我们所写的代码)进程:进程就是程序的一次执行,是系统进行资源分配和调度的独立单位。程序是一次没有生命的实体,只有操作系统执行它时,它才能成为一个活动的实体,也就是进程。同时,操作系统通过进程控制块(pcb),来对程序进程调度使用操作系统如何控制和调度程序按照冯诺依曼体系结构,所有的数据想要被CPU进行处理,第一步就是要将代码和数据加载到内存中由于早期CPU的性能不足,无法同时调度所有文件,所以CPU使用了一种解决方法,也就是CPU分时机制。CPU分时

2021-10-26 15:41:14 882

原创 C++实现日期累加

题目描述设计一个程序能计算一个日期加上若干天后是什么日期。输入描述输入第一行表示样例个数m,接下来m行每行四个整数分别表示年月日和累加的天数。输出描述输出m行,每行按yyyy-mm-dd的个数输出。题目思路首先,要判断加上的日期后是否经过闰年,如果经过闰年的话在这一年中的二月份是29天,如果不是闰年,则这一年的二月就是28天,所以我们要判定一下平闰年,在这里我用了一个数组来吧平年和闰年的月份分开来,这样只要判定是否为平闰年后直接带入数组就可以了,源码实现// An highlighted

2021-10-26 13:08:24 805

原创 C++日期类

1.Date中的构造函数在C++中,有一种特殊的成员函数,它的名字和类名相同,没有返回值,不需要用户显式调用(用户也不能调用),而是在创建对象时自动执行。这种特殊的成员函数就是构造函数,但是对于日期类,这里默认构造函数什么也不做,如果你创建了一个Date d1,系统调用了默认构造函数,你会发现在这里年月日都是随机值,我们为了让d1在初始化的时候就有一个确认的日期,所以自己要写一个全缺省的构造函数,我们在函数说明中给一个确定的值,让每个创建出来的日期类变量都有一个默认的初始值1900.1.12.Date中

2021-10-21 16:45:34 314

原创 this指针的认识

this指针的用处:一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果。this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。也就是说,即使你没有写上this指针,编译器在编译的时候也是加上this的,它作为非静态成员函数的隐含形参,对各成员的访问均通过this进行。   例如,调用date.SetMonth(9) <===> SetMonth(&date, 9),this帮助.

2021-10-06 14:11:51 61

原创 strstr的实现

strstr的实现具体思路首先,根据strstr函数的实现方法得知函数需要传进去的参数是两个字符串,而且这两个字符串都是不可更改的,这样,我们可以利用const来修饰;而且函数返回的也是一个字符串,那么返回值类型也可以确定,这样,我们可以写出这样一个函数的定义:char* my_strstr(const char* dest,const char* src){}。其中,dest指向的是目标字符串,也就是你需要比较的字符串,src指向的是源字符串,也就是用来被比较的字符串。找不到就可以返回一个空指针.源

2021-06-22 17:01:57 1024 4

原创 C语言进阶-数据的存储

1.数据在内存中的存储变量类型对于数据储存的意义1.类型决定开辟内存空间的大小.2.二进制序列在内存中储存的方式.例如int,double,float.储存方式不一样 将一个类型输出到另一个类型中的结果就不一样整型在内存中的存储例如int i=3;储存1.先看赋值操作符右边,将对应的数字转换成二进制序列 ,在转换成补码形式2.看变量类型开辟了多少空间,然后将二进制序列补码按字节放入对应空间中读取1.此时要先看变量类型,如果是整型无符号数直接按二进制序列输出,如果是有符号数需要求出补码对

2021-05-24 21:48:58 88

原创 C语言实现扫雷

目录游戏规则设计思路源码实现心得体会游戏规则在一个9*9的地图上一共有十个雷,翻开所有不是雷的位置 游戏即为胜利,如果踩到雷,游戏结束设计思路1.创建地图并初始化2.打印地图两张地图,用一个函数就能实现3.扫雷玩家输入要打开的位置。4.判断是否踩雷踩雷的话就直接游戏结束5.更新 showMap显示以当前位置为中心,周围一共有几个地雷6.判断游戏是否胜利如果你打开了不是地雷的所有位置,游戏胜利源码实现// An highlighted block#define _CRT_S

2021-05-10 18:25:23 157 6

原创 C语言实现三子棋

目录游戏规则逻辑梳理源码实现心得体会游戏规则一个人和电脑玩家在九宫格上下棋 一个用x一个用o 率先将三个棋子连成一条直线的获胜~逻辑梳理1.创建棋盘2.打印棋盘3.玩家和电脑落子4.判定胜负源码实现// An highlighted block#define _CRT_SECURE_NO_WARNINGS#pragma warning(disable:6031)#include<stdio.h>#include<stdlib.h>#include&lt

2021-05-09 17:36:21 623 8

原创 实现用函数交换两个数的值

实现用函数交换两个数的值首先你要想好指针传参的过程再用一个简单的变量交换就可以达成你想要的目的了源码实现#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>void swap(int* a, int* b) {int t = 0;t = *a;*a = *b;*b = t;}int main() {int a = 0, b = 0;printf(“请输入您要交换的值a,b\n”);scanf("%d%d", &

2021-05-04 17:55:53 581 1

原创 实现用函数判断year是不是闰年

实现用函数判断year是不是闰年程序:#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>void leapYear(int year) {scanf("%d", &year);if (year % 4 == 0 && year % 100 != 0 || year % 100 == 0) printf("您输入的%d年为闰年\n", year);else { printf("您输入的%d年不是闰年\n", y

2021-05-04 17:31:03 623 1

原创 A7的第一篇博客

A7的第一个博客一,自我介绍大家好,我是来自陕西科技大学2019级电子科学与技术的一名大二学生,首先介绍一下自己的名字A7,其实这是我喜欢的一台车的名字,步入正题,现阶段正在初步学习编程,平时喜欢打游戏运动,不知道为何在一瞬间喜欢上了编程敲代码,希望自己称在这条路上越走越远吧。二,编程目标近期的目标就是稳固自己的程序基础知识,脚踏实地一步一个脚印的学习下去。长远的目标肯定就是进大厂,提升自己的能力,在这个社会上找到属于自己的一个位置。三, 如何学习编程我觉得想学好一定要稳固自己的脚步,不停地去敲

2021-04-03 14:34:42 2181 3

空空如也

空空如也

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

TA关注的人

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