自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(172)
  • 资源 (3)
  • 收藏
  • 关注

转载 vsftpd.conf配置文件详解

如果启用,则vsftpd服务器会检查/etc/hosts.allow 和/etc/hosts.deny 中的设置,来决定请求连接的主机,是否允许访问该FTP服务器。若设置为YES,则vsftpd.user_list文件中的用户不允许访问FTP,若设置为NO,则只有vsftpd.user_list文件中的用户才能访问FTP。当设置了该配置项后,用户登陆服务器后,系统就会到/etc/vsftpd/userconf目录下,读取与当前用户名相同的文件,并根据文件中的配置命令,对当前用户进行更进一步的配置。

2022-10-24 17:05:37 4124 1

原创 linux驱动学习笔记(1)

驱动、块设备驱动、网络设备驱动。

2022-07-29 10:34:46 265

原创 c++(27)STL:容器、算法、迭代器

standardtemplatelibrary,标准模板库,是由惠普实验室开发的一系列软件的统称。STL广义上分为容器container、算法algorithm、迭代器iterator,容器和算法之间通过迭代器进行无缝连接。STL几乎所有的代码都采用了模板类或者模板函数,这相比传统的由函数和类组成的库来说提供了更好的代码重用机会。在c++标准中,STL被组织成一下13个头文件使用STL的优点(1)且现在STL是C++的一部分,被内建在c++编译器中,不需要额外安装。...

2022-07-28 16:07:04 508

原创 c++(26) 输入输出流、文件操作

cin会创建一个输入缓冲区,键盘向屏幕输入字符的时候,会将数据放进缓冲区。如果缓冲区内没有数据,则会阻塞等待键盘输入。同样的cout也会有自己的缓冲区,在有的linux编译器下,cout

2022-07-27 18:02:02 533

原创 c++(25)类型转换、异常机制

public{}{}{=NULL){}编译器差异,实际上vs上是需要自己手动释放的*/}publicchar*err;};{publicpeople(){}{{throwmyOutOfRange("年龄应该在0-200之间");}}publicintm_age;};{peoplep;try{}{}}{func();return0;}执行结果httpshttpshttps。

2022-07-26 15:32:37 254

原创 c++(24)STL引入:函数模板、类模板

我们在C语言的常规编程工作中,经常会遇到因为形参数据类型,而定义多个函数。比如功能交换A和B的值只要A和B这两个数据的类型不同,我就要重定义一个新函数,而这两个函数除了形参数据类型不一样,其他的逻辑都是一样的。这样就造成了代码的重复,增加维护成本。为了解决这个问题,c++引入了函数模板使形参类型化,实现定义的时候不关心具体的数据类型,只关心功能的实现。编译器为了与普通函数区分,使用关键字template。函数模板不允许自动类型转化普通函数能够自动进行类型转化。..................

2022-07-21 20:22:22 637

原创 c++(23)纯虚函数和抽象类、C语言函数指针的语法和意义

3)、被当做父类的抽象类,通常被当做API接口被提供,也常常使用抽象类的指针指向实例化的对象(父类指针指向子类对象)。业务层的代码程序设计,面向抽象类编程,降低代码耦合度。依赖倒转原则-----上层业务层和底层实现层,向中间抽象层靠拢。(1)、只要当类中拥有纯虚函数,无论这个类有没有成员变量,这个类都是一个抽象类,(2)、当一个普通的类,继承自抽象类的时候,,否则这个类仍然是抽象类。.........

2022-07-20 16:18:07 354

原创 c++(22)多态和虚函数、虚函数表和vptr、对象指针的步长

由继承而产生的相关却不同的类,其对象对同一消息会做出不同的响应。就是说基类指针可以按照基类的方式来做事,也可以按照派生类的方式来做事,它有多种形态,或者说有多种表现方式,我们将这种现象称为。多态是对象对象程序设计的一个重要特征,能增加程序的灵活性。可以减轻系统升级、维护、调试的工作量和复杂度。可以通过基类指针对所有派生类(包括直接派生和间接派生)的成员变量和成员函数进行“全方位”的访问,尤其是成员函数。如果没有多态,我们只能访问成员变量。......

2022-07-18 17:32:12 533

原创 c++(22)多继承和虚继承

在现实意义中,类内的两个同名变量的用处不大,如果换个例子,当爷爷类是家具,有个成员变量表示材料。两个子类分别是沙发和床,然后有一个沙发床多继承自沙发还有床,那这个沙发床无论是继承自谁,永远也支持一种材料(来自爷爷的隔代继承)多继承,是指一个子类,继承了两个不同的父类。若这俩个不同的父类,又继承自同一个爷爷类,那么就形成了所谓的菱形继承。像上面这种继承关系的例子,在实际使用中,一个人不会用两个姓氏。当出现菱形继承时,为了避免出现歧义,爸爸类要声明为。,这样孙子类的变量就只有一份,来自爷爷类。...

2022-07-18 14:27:51 411

原创 c++(21)继承和派生

子类构造函数执行的时候,会先调用父类的默认构造函数。也可以显示的在子类构造函数后加父类构造,去指定调用父类的哪个构造函数。析构的顺序,跟之前说的一样,先构造的后析构,所以是先调用子类析构,再调用父类析构。......

2022-07-16 14:19:52 291

原创 c++(20)自定义的string类,老生常谈的c++笔试题

主要还是为了熟悉操作符重载,和了解string类的实现方法。还有c++笔试题确实满常见的,主要是考察拷贝构造、深拷贝、操作符重载等问题。下面看下我的MyString的实现,写的一般,网上还有好多大神写的比较全的。my_string.h头文件my_string.cpp源码 main.cpp测试程序执行结果:附带一个linux环境的makefile,写的比较简单...

2022-07-13 09:53:19 184

原创 c++(19)自定义的智能指针

这里主要是练习一下操作符重载。从比较简单的层面来看,智能指针是RAII(Resource Acquisition Is Initialization,资源获取即初始化)机制对普通指针进行的一层封装。这样使得智能指针的行为动作像一个指针,本质上却是一个对象,这样可以方便管理一个对象的生命周期。使用智能指针时要注意,在c++中,智能指针一共定义了4种:auto_ptr、unique_ptr、shared_ptr 和 weak_ptr。其中,auto_ptr 在 C++11已被摒弃,在C++17中已经移除不可用。

2022-07-12 19:05:25 492

原创 c++(18)操作符重载

先看一下操作符重载的基本语法,注意在函数声明时,operator操作符重载关键字后不加空格。关于重载的规则(1)c++不允许用户自己定义新的运算符,只能对已有的c++运算符进行重载(2)c++有些运算符不可重载下面是可重载的运算符列表:下面是不可重载的运算符列表:(3)运算符重载不能改变运算符对象(即操作数)的个数(4)重载不能改变运算符的优先级别(5)重载不能改变运算符的结合性(6)重载运算符的函数不能有默认参数(7)重载的运算符,必须和用户定义的自定义类型的对象一起使用,其参数至少应有一个是类

2022-07-11 18:05:35 507

原创 c++(17)友元函数

如果类外部有一个函数经常访问该类的成员变量(private),那么可以在类内加上friend关键字,将类外的函数声明为该类的友元函数,那么可以在友元函数里直接访问类的成员变量(而不需要通过get、set方法)。采用类的机制后实现了数据的隐藏和封装,类的数据成员一般都会定义为私有成员,成员函数一般定义为公有的,依次提供类与外界的通讯接口。但是有时需要定义一些函数,这些函数不是类的一部分,但又需要频繁的访问类的数据成员,这时可以讲这些函数定义为该类的友元函数。除了友元函数,还有友元类,两者统称为友元。友元

2022-07-11 11:06:14 99

原创 c++(16)this指针详解

在c++类的静态成员变量和静态成员函数中,多次涉及到了this指针。下面注重介绍一下前面讲static成员变量占用的时候提到,如果sizeof类的大小,是不会计算static成员变量的,同样的也不会计算成员函数,换句话说,其实成员函数是在类外的。那么当我们创建完对象,使用对象的成员函数,它是怎么知道我们访问的是哪个对象的成员变量的?我们知道编译器在编译一个普通成员函数时,会隐式地增加一个形参 this,并把当前对象的地址赋值给 this,所以普通成员函数能在创建对象后通过对象来调用并访问该对象的成员变量。

2022-07-06 16:57:29 7036

原创 c++(15)静态成员变量、静态成员函数、static占用大小

1) 一个类中的静态成员变量,所有的对象都共享这些静态成员变量,都可以引用它。2) static 成员变量在全局数据区分配内存,到程序结束时才释放。而且是在类外存储,当求类的大小时,并不会包含在内。====》那么static 成员变量不随对象的创建而分配内存,也不随对象的销毁而释放内存。而普通成员变量在对象创建时分配内存,在对象销毁时释放内存。3) 静态成员变量必须初始化,且只能在类体外进行。例如:int Student::m_nId = 10;全局数据区的变量都有默认的初始值 04) 静态成员变量既可以通

2022-07-06 10:27:45 623

原创 c++(14)new和delete

1、new和delete成对使用2、malloc、free 和 new、delete这两个可以混合使用3、malloc、free 和 new、delete区别:malloc和free是函数,但new和delete是c++中的操作符。new还可以触发类对象的构造函数,malloc在这一点上缺失了一些实用性。同理delete也可以触发对象的析构函数,free不会调用对象的析构函数。这样的话可能会存在一个风险。比如下面的例子执行的结果 我们可以看到,当我们使用malloc的时候,想要初始化成员变

2022-07-05 20:51:13 198

原创 c++(13)构造函数的初始化列表

使用场景:当类中的成员变量中有其他类的对象,这时候需要用构造函数的初始化列表,调用对应类的构造函数。1、成员对象的构造顺序和初始化列表的顺序无关,只与成员对象的定义顺序有关。2、成员变量的初始化顺序只与成员变量在类中声明的顺序有关,与初始化列表中列出的变量的顺序无关3、常量的初始化只能在初始化列表中...

2022-07-05 19:55:53 148

原创 c++(12)深拷贝、浅拷贝

首先要知道什么是深拷贝和浅拷贝浅拷贝:简单的赋值拷贝操作。深拷贝:在堆区重新申请空间,进行拷贝操作。先说结论:在对含有指针成员的对象进行拷贝时,必须自己定义拷贝构造函数,达到深拷贝的目的,才能避免内存重复释放。看一下下面的例子执行结果,程序崩溃当上面的例子创建对象t1的时候,会调用t1的有参构造,new一个char*空间赋值给m_name,m_name在堆上指向zhang3的地址空间。这里是没有问题的。但是当创建对象t2的时候,使用的拷贝构造的方式创建对象。而且由于程序员没有定义显示的拷贝构造函数,编

2022-07-05 16:20:11 385

原创 c++(11)构造函数、析构函数

1、构造函数可以被重载2、析构函数没有形参,自动调用3、构造函数和析构函数,都没有返回值4、默认的无参构造函数和析构函数,默认的构造函数和析构函数,里面没有执行任何代码。一旦程序员提供了一个显示的构造函数(无论是否有参数、无参数)和析构函数,那么默认的构造函数和析构函数就不复存在了。如果有继承关系,那么会先调用基类的构造函数,然后再调用派生类的构造函数。析构函数的调用顺序与构造相反,先构造的后析构。而且,调用构造函数一定会调用析构函数,调用了两次构造函数,一定会调用两次析构函数。除非手动调用析构函数。由已存

2022-07-05 15:13:26 697

原创 c++(10)封装、继承、多态

概念:(1)、该隐藏的数据私有化,该公开的公有化(接口)(private、public);(2)、目的就是为了分工合作,有助于使用的方便和安全性;(3)、防止不必要的扩展。概念:(1)、实现代码和数据的复用,复用的实现在已有的代码和数据的基础上扩展。看我之前写的一篇文章,比较详细的介绍了,什么叫多态,怎么使用多态,多态的实现机制。初入c++(六)虚函数实现多态,虚析构函数,虚函数表和多态实现机制,纯虚函数。_Mr.TangR的博客-CSDN博客_纯虚函数实现多态...

2022-06-21 11:24:45 235

原创 c++(9)默认参数、函数重载、重载的底层实现

必须在函数声明时,定义默认参数,且必须从后往前定义。function overload,用同一个函数名定义不同的函数,当函数名和不同的参数搭配时函数的含义不同。但是函数返回值并不是构成函数重载的条件,即只是函数形参列表相同、函数名相同,但是函数返回值是不同的类型,那么这两个函数不构成函数重载,会报错重定义。函数重载,尽量不要写默认参数,避免调用时发生歧义,编译器不通过。重载规则:(1)、函数名相同。(2)、参数个数不同、参数类型不同、参数顺序不同,均可以构成重载。(3)、返回值类型不同则不可以构成重载。调用

2022-06-21 10:03:59 400

原创 c++(8)inline内联函数

C语言中有宏函数的概念。宏函数的特点是内嵌到调用代码中去,避免了函数调用的开销。但是由于宏函数的处理发生在预处理阶段,缺失了语法检测和有可能带来的语意差错。所以c++提供了inline关键字,实现了真正的内嵌。inline函数的特点(1)、内联函数声明时inline关键字必须和函数定义结合在一起,否则编译器会忽略内联请求。(2)、c++编译器直接将函数体插入在函数调用的地方展开。(3)、内联函数没有普通函数调用时的开销(压栈、跳转、返回)(4)、内联函数是一种特殊的函数,具有普通函数的特征(参数检查,

2022-06-20 19:20:02 71

原创 c++(7)引用作为函数的返回值、指针引用、const引用

引用作为返回值,一般不常见,实际在真正的工作过程中也是极少遇见。引用作为返回值有他的有点,也有他的缺点。看下面的代码getmem1和getmem2,是简单介绍了一下,通过指针可以实现的返回指针的操作。同理,根据上一篇的内容,能用指针实现的。使用引用也可以实现。这里不做过多研究了。下面开始分析:当引用作为返回值,如getA,实际上返回的是一个别名,我们把getA理解是一个局部的变量temp,在函数返回的时候相当于是 int &temp = a;返回的是局部变量a的别名。但是局部变量a在栈上,并当函数返回

2022-06-20 18:25:53 741

原创 c++(6)对C语言的扩充,引用

实际上可以理解成,是一个变量的别名。使用方法结果为a = 100(1)、引用声明的时候必须初始化,一经声明,不可改变。(2)、引用没有定义,是一种关系型声明。类型要与原变量类型保持一致,且不分配内存。与被引用的变量有相同的地址。(3)、可以对引用,再次引用。多次引用的结果,是某一变量具有多个别名。(大名、小名、昵称)(4)、&符号前有数据类型的时候,是引用。其他皆为取地址。(1)作为函数的入参,修改入参的值,降低入参使用难度。这也是c++加入引用的初衷。(2)当入参数据很大时,不需要拷贝操作,不耗费资

2022-06-14 15:07:46 119

原创 c++(5)对C语言的增强 三目运算符,const,枚举

我们想要把50的值赋值给a,在C语言中下面的语句,编译会报错。原因是,由于等于号是赋值运算符,左值只能是变量,而不能是数据(常量)。(a

2022-06-14 14:11:58 172

原创 c++(4)对C语言的增强

在C语言中,上面的代码编译不会报错。c语言会把第二次的int g_nVal=20;翻译为赋值语句g_nVal=20。像驱动程序员需要关心数据的储存位置,像未定义的全局变量,会储存在bss段。定义全局变量并赋初始值的话 会储存在data段。而在c++语言中,主要是针对应用层,往往不关心储存位置。那么就会对重定义进行严格的检测。...

2022-06-07 20:32:11 97

原创 c++(3)自定义命名空间

下面的例子 讲述了自定义命名空间的使用方式。和几种不同的引用定义名称的方法。

2022-06-07 14:27:35 617

原创 STM32系统时钟配置

STM32有以下4个时钟源:高速外部时钟(HSE):以外部晶振作时钟源,晶振频率可取范围为4~16MHz,我们一般采用8MHz的晶振。高速内部时钟(HSI) : 由内部RC振荡器产生,频率为8MHz,但不稳定。低速外部时钟(LSE):以外部晶振作时钟源,主要提供给实时时钟模块,所以一般采用32.768KHz。低速内部时钟(LSI) :由内部RC振荡器产生,也主要提供给实时时钟模块,频率大约为40KHz。然而我们在main函数中并没有调用什么函数来选择systemclock啊,那么这个系统....

2022-06-07 10:31:18 763

原创 c++(1)语言特性——面向对象、高效、抽象、建模

一句话概括:c++是一门面向对象,既高效、且具有较强抽象和建模能力的语言!由于其c++语言本身的高效性,应用于系统层软件开发。包括游戏、网络、分布式、云计算、服务器程序开发、科学计算(ACE等科学类库)。c++三大特点——继承、封装、多态。......

2022-06-07 10:29:48 436

原创 算法学习随笔——3.算法分析原理(搜索问题优化)

这里主要记录的是算法学习过程中,值得学习和借鉴的解决问题思路。并不能解决某一特定的现实问题。用做启发和思考。在日常工作中,经常会遇到搜索问题。比方红外功能实现的遥控器键值表中,搜索特定键值、其中包括各种呈线性规则的数据表中搜索特定数据。常规的方式就是遍历搜索例1.这样的时间复杂度为O(N),功能实现有两种情况,一种是找到数据并返回数据下标,另一种是找不到数据。当出现最坏的情况,和找不到数据的情况都需要遍历整个数组,循环操作N次。但是如果将特定的线性数据按照顺序排列,那么我们程序的消耗时间就会降低。例1

2022-06-06 14:56:04 129

原创 算法学习——2.连通性问题(二)

1.2.3 加权快速合并算法快速合并算法仍然有他的局限性,因为查找根节点的次数并不是固定的,如果出现极端情况那么任然会出现计算较多的次数。假定输入对按照1-2, 2-3, 3-4, 4-5......的次序出现,然么N-1个数对形成的树为一条直线。其中N指向N-1,N-1指向N-2以此类推。要查找N最下面的节点,则需要N-1次遍历。那么查找M个对象的查找操作次数必定大于MN/2。

2022-05-27 10:48:41 113

原创 算法学习——1.连通性问题(一)

帮助通透理解典型问题-连通性问题的快速查找法,快速合并算法,学习数据结构与算法。

2022-05-26 20:53:20 317

原创 linux环境链接静态库找不到实现处理方法

linux环境链接静态库找不到实现处理方法,处理Makefile编译报错

2022-05-23 17:15:55 1137

原创 存储器简介

存储器分为非易失性存储器(NVM)和RAM,其中NVM包括ROM、Flash和光磁介质存储器;RAM包括SRAM、DRAM和特定应用的RAM。

2022-04-22 14:41:38 622

原创 BootLoader简介——linux内核的引导

BootLoader简介——linux内核的引导

2022-04-22 14:35:14 985

原创 SPI总线协议

SPI总线协议简介,SPI的四种工作模式

2022-04-13 14:39:33 718

转载 C++在类中能定义本身类型的成员

C++在类中能定义本身类型的成员吗

2022-03-21 15:09:29 463

转载 CRC16常见几个标准的算法及C语言实现

CRC16常见的标准有以下几种,被用在各个规范中,其算法原理基本一致,就是在数据的输入和输出有所差异,下边把这些标准的差异列出,并给出C语言的算法实现。CRC16_CCITT:多项式x16+x12+x5+1(0x1021),初始值0x0000,低位在前,高位在后,结果与0x0000异或CRC16_CCITT_FALSE:多项式x16+x12+x5+1(0x1021),初始值0xFFFF,低...

2019-11-27 10:02:29 603

原创 C++ static静态成员变量详解

对象的内存中包含了成员变量,不同的对象占用不同的内存,这使得不同对象的成员变量相互独立,它们的值不受其他对象的影响。例如有两个相同类型的对象 a、b,它们都有一个成员变量 m_name,那么修改 a.m_name 的值不会影响 b.m_name 的值。可是有时候我们希望在多个对象之间共享数据,对象 a 改变了某份数据后对象 b 可以检测到。共享数据的典型使用场景是计数,以前面的 Student ...

2019-10-15 11:19:30 238

HexEditor.rar

HexEditor.dll,notepad++2进制16进制文件编辑插件必备插件

2019-07-17

si5341.rar

si5341时钟配置demo供参考 /******************************************************************************* * 模块名 : PLL * 文件名 : si534x.c * 相关文件: si534x.h * 文件实现功能: si5341功能实现 * 作者 : tangrui * 版本 : 1.0 * ----------------------------------------------------------------------------- * 修改记录: * 日 期 版本 修改人 修改内容 * 2015/08/31 1.0 tangrui 创建 *******************************************************************************/

2019-06-19

空空如也

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

TA关注的人

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