自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Kong

人生苦短,只争朝夕。

  • 博客(62)
  • 资源 (2)
  • 收藏
  • 关注

原创 【造轮子】系列导航

1. 前言初级程序员向中高级程序员进阶的一大指标就是要从会用工具到理解工具。纵然现成的各个 API、指令等都已经基本是完成对应功能的最优解,但通过反推其底层的工作原理,能够大大提高程序员的编程水平与对系统的认知。本系列将反推各种工具的底层原理,并加以实现,这也便是造轮子。轮子的类型不受限制,有 API、Linux 命令、数据结构等。2. 文章索引以下为《造轮子》系列博文的索引,供方便查阅...

2020-05-03 17:31:43 354

原创 【C 高阶】系列导航

1. 撰写前言C 语言可谓是现代编程语言之祖,其编程语法被很好地扩展到其衍生语言之中,为面向对象的语言打好根基,时至今日仍被认为是学习编程最佳的入门语言。《C 高阶》系列将专注于 C 语言的高阶用法,其在大型项目如 Linux 内核中被广泛使用。通过学习这些 C 语言的奇技淫巧,能够更好地学习计算机的底层逻辑,以便于进一步学习 Linux 内核程序。让我们一起领略 C 语言的精髓所在吧!2...

2019-10-06 19:45:00 451

原创 【从 C 向 C++ 进阶】系列导航

1. 前言想写关于 C++ 的博文挺久的了,而本人也在有道云笔记上记录了一系列关于学习 C++ 的笔记,因此何不把这些笔记整理成较系统的博文分享出来,让大家一起进步呢?带着这个想法,撰写《从 C 向 C++ 进阶》系列博文正式启动。本系列适合于有一定 C 语言基础,并想进一步学习 C++ 的同学。系列主要分为三子系列:类、对 C 的语法扩展、STL 库。其中,《类》子系列将深入浅出介绍关于类...

2019-07-07 18:02:05 669

原创 【造轮子】实现冒泡排序、选择排序(C++)

1. 冒泡排序1.1 算法原理核心思想多次遍历,每次遍历把两相邻数之间相比较,如果大数在前,小数在后,则交换。每次遍历后当前遍历区间内最大的元素会被放到区间的末尾。算法过程第一遍遍历区间为 [0, N-1],两个相邻元素进行比较,需使之维持较小元素在前,较大元素在后。遍历完后,数组中最大的元素会被放到数组的末尾位置,然后进行第二遍遍历。第二遍遍历区间为 [0, N-2],操作方法相同。遍历完后,数组中第二大的元素被会放到数组倒数二个位置,然后进行第三遍遍历。以此类推,直至遍历区间缩小到一个

2020-06-25 17:14:49 196

原创 【C 高阶】可变参数

1. 简介可否想过 C 语言中最常见常用的 printf() 函数是如何做到接收任意类型、任意数量的参数的呢?实际上,printf() 中通过可变参数特性来接收任意类型、任意数量的参数。可变参数通过占位 ... 显式指示,例如以下函数的形参就是可变参数:void fun (...){ // do something}2. 相关 API在函数中怎么使用这些可变参数呢?C 语言在头文件 <stdarg.h> 中提供了三个操作可变参数的 API:va_start、va_arg

2020-05-24 11:29:27 271

原创 【C 高阶】解析命令参数方法

C 高阶系列导航1. C 程序的参数在命令行中执行应用软件时,常使用参数来完成对应用的配置或设置。因此,程序中对命令参数进行解析是非常常见且重要的功能。在 C 语言中,当程序需要使用命令参数时,mian 函数必须为以下形式:int main(int argc, char* argv[]){ // ...}参数对应着 main 函数的形参 argc 与 argv。argc ...

2020-05-05 11:47:10 2132

原创 【C 高阶】C 的类泛型编程 -- Linux 内核链表

1. 链表简介由于 C 语言为面向过程的语言,标准库中并没有提供数据结构相关的数据类型。因此,当需要在程序使用链表结构时,只能从 0 开始实现一个链表类型,且设计的质量参差不齐。在 Linux 内核中提供了一个通用的链表节点类型 struct list_head,该链表为循环双向结构,并配套了一系列维护链表结构的 API。在程序中,只需在定义结构体时包含一个 struct list_head...

2020-05-03 16:31:18 284

原创 【造轮子】实现 strdup 函数

1. 函数简介strdup 函数为 C 库函数之一,用于获取一个位于堆空间的与指定的字符串一致的字符串。原型:char* strdup (const char* str);所属头文件:<string.h>功能:获取一个位于堆空间的与 str 所指字符串一致的字符串。返回:指向堆空间的字符串的指针。2. 函数说明使用 strdup 能够得到一个给定字符串的拷贝,...

2020-04-21 21:14:54 755

原创 【造轮子】实现 memset、bzero 函数

1. memset 函数1.1 函数简介memset 函数为 C 库函数之一,用于直接对内存赋值,常用于内存的初始化。原型:void* memset (void* dst, int val, size_t n);所属头文件:<string.h>功能:从 dst 所指的内存空间的前 n 个字节以字节为单位赋值为 val。返回:目标内存的首地址。1.2 函数说明...

2020-04-19 20:53:29 673 2

原创 【造轮子】实现 atoi、itoa 函数

1. atoi 函数1.1 函数简介atoi 函数为 C 库函数之一,用于把字符串转换为对应的整形十进制数字。原型:int atoi (const char* str);所属头文件:<stdlib.h>功能:把 str 指向的字符串转换为对应的整形十进制数字。返回:转换得到的数值。1.2 函数说明在原 atoi 函数中,如果字符串含非数字字符即非 ‘0’ -...

2020-04-19 11:30:07 242

原创 【Linux 编程】线程绑定 CPU

1. 绑定目的在 Linux 系统中,线程调度是由内核自主完成的。当系统运行在多核 CPU 上时,线程有可能在不同的 CPU 核上来回切换执行。这不利于 CPU 的缓存,缺页率较高。以 Intel i5 CPU 为例。在多核 CPU 结构中,每个 CPU 有各自的 L1、L2 缓存,而 L3 缓存是共用的。如果一个线程在 CPU 间来回切换,各个 CPU 的缓存的命中率将会降低。而如果线程不管...

2020-01-19 21:55:31 2359

原创 【C 高阶】盘点标准 C 库文件操作函数

1. C 库 API 的特点在标准 C 语言库中有提供一套完整的文件操作 API,如 fopen()、fgets()、fread() 等,使用这些 API 可以对指定文件进行读写操作。C 库 API 具备以下特征:高兼容有别于系统调用 API(如 Linux 下的 open()、read()、write() 等),C 库 API 是支持跨平台的。也就是说,无论在 Window、Lin...

2019-12-14 21:19:49 487 2

原创 【造轮子】实现 strcasecmp、strcasencmp 函数

函数重现系列导航1. 函数简介strcasecmp 函数为 C 库函数之一,用于字符串忽略字母大小写的比较。原型:int strcasecmp (const char* str1 ,const char* str2);所属头文件:<string.h>功能:比较 str1 指向的字符串和 str2 指向的字符串。两个字符串自左向右比较每个字符的 ASCII 值大小,且忽略...

2019-12-14 21:09:25 1782 1

原创 【C 高阶】彻底理解数组与指针

C 高阶系列导航0. 前言本文将深入浅出地讲述数组与指针之间的共性与关联,适合有一定 C/C++ 功底的同学进阶学习。文中的程序均在 64 位环境下运行,且程序运行的结果会以注释的方式呈现在代码中以便阅读。全文学习约需 15 分钟。1. 数组和指针的本质数组类型和指针类型都是 C 的特殊数据类型,这里的“特殊”是相对于整型、浮点型等基本数据类型来说的。一般地,数组类型变量统称为...

2019-12-03 21:10:47 685

原创 【C 高阶】数组和指针笔试题精选

C 高阶系列导航1. 前言在 C/C++ 相关的岗位笔试中,数组和指针相关的知识点为高频考点,能够很好考察应聘者的 C/C++ 功底。因此,本文精选了数组与指针相关的笔试题,并解析解题思路,希望能够加强读者对数组和指针的理解。在阅读本文前,强烈推荐先学习博文《【C 高阶】- 彻底理解数组与指针》,里面详细介绍了数组与指针之间的共性与关联。2. 笔试题精选第一题以下程序输出的结果是?...

2019-12-03 21:07:59 289

原创 【造轮子】实现 strtok 函数

函数重现系列导航1. 函数简介strtok 函数为 C 库函数之一,用于分割字符串。原型:char* strtok (char* str, const char* delim);所属头文件:<string.h>功能:使用 delim 指向的字符串中的字符分解 str 指向的字符串,str 指向的字符串中与 delim 指向的字符串的交集的字符都将被“\0”替换,达到分割...

2019-11-16 17:21:32 671 1

原创 【C 高阶】函数宏的三种封装方式

C 高阶系列导航1. 函数宏介绍函数宏,即包含多条语句的宏定义,其通常为某一被频繁调用的功能的语句封装,且不想通过函数方式封装来降低额外的弹栈压栈开销。函数宏本质上为宏,可以直接进行定义,例如:#define INT_SWAP(a,b) \ int tmp = a; \ a = b; \ b = tmp但上述的宏具有一个明显的缺点:当遇...

2019-11-10 10:19:38 1844

原创 【C 高阶】共用体(联合体)

C 高阶系列导航1. 共用体简介共用体又称联合体,为一种 C 语言的复合数据类型。共用体与结构体类似的是,同为多种数据类型的集合;不同的是,共用体在同一时刻只能表现出其中一种数据类型,而结构体本身包含着多种数据类型。如何理解“共用体在同一时刻只能表现出其中一种数据类型”这一句话呢?可以从数据类型的角度解答。数据类型为对某段内存以特定方式进行解析的方法,比如整型就是对 4 字节大小的内存以...

2019-10-29 16:44:34 1304 2

原创 【从 C 向 C++ 进阶】- 对 C 的语法拓展 - 异常处理

从 C 向 C++ 进阶系列导航1. C++ 新增的异常处理在 C++ 中新增了异常处理语法 try\catch,try 语句处理正常代码逻辑,catch 语句处理异常情况,通过 throw 语句可以抛出异常信息然后由相对应的 catch 语句处理。具体语法如下:try{ ...}catch{ ...}需要注意的是,throw 语句会由于发生地方的不同而表现出...

2019-10-26 21:41:05 150

原创 【从 C 向 C++ 进阶】- 类 - 28. 单例模式类模版

从 C 向 C++ 进阶系列导航1. 单例模式类单例模式类的含义是在整个程序生命周期中,只能存在一个对象。那么怎么限定编译器只能生成一个类对象呢?我们可以借用 static 成员的全局特性,作为是否已存在类对象的标志。具体实现方法是:将构造函数的访问属性设置为 private,定义 symbol 并初始化为 NULL;当需要使用对象时,先访问 symbol 的值,如果是空值,那么便创建对...

2019-10-15 21:17:30 145

原创 【从 C 向 C++ 进阶】- 类 - 27. 简单数组类模版

从 C 向 C++ 进阶系列导航1. 数值型模版参数模板参数除了有数据类型外,还有数值类型。声明方法如下:template <Type N>...其中,Type 为显式的数据类型,一般为 int。使用数值型模板参数有以下限制:变量不能作为模板参数。浮点数不能作为模板参数。类对象不能作为模板参数。数值型模板参数本质是模板参数是在编译阶段被处理的单元,因此在编译阶...

2019-10-13 11:12:28 165

原创 【C 高阶】枚举

C 高阶系列导航1. 枚举简介枚举是 C 中的一种基本数据类型,常作为数据标识符的集合使用,能够明显地提高程序的可读性与安全性。2. 枚举的定义枚举的定义格式为:enum 枚举名 { 枚举元素 1, 枚举元素 2, ...};如果需要定义枚举变量时,可以使用 typedef 对枚举类型的名称进行简化:typedef enum 枚举名 { 枚...

2019-10-07 16:45:12 319 1

原创 【从 C 向 C++ 进阶】- 类 - 26. 模板特化

从 C 向 C++ 进阶系列导航1. 多参数类模版类模板支持多个泛型参数,使用方式与函数模板基本一致。实验:template <typename T1, typename T2>class Operator{public: T2 add(T1 a, T2 b); T1 minus(T1 a, T1 b);};template <typen...

2019-10-03 15:44:59 207

原创 【从 C 向 C++ 进阶】- 类 - 25. 类模版

从 C 向 C++ 进阶系列导航1. 类模版C++ 提供了类模板。与函数模板相同,类模板本质也是数据类型的替换,在定义类对象时指定数据类型可以控制类中的数据类型等。类模板定义方式如下:template <typename T>class ClassName{ ...}类模板也会进行二次编译。第一次为类模板本身的编译,第二次为数据类型替换后的类编译,每定义一个类...

2019-10-01 10:50:19 188

原创 【从 C 向 C++ 进阶】- 类 - 24. 函数模版

从 C 向 C++ 进阶系列导航1. 函数模版C++ 中提出了函数模板的概念。函数模板可以看作是具备类型检查的宏,并可适配任意的数据类型。这也是泛型编程的思想,即不考虑具体数据类型的编程方式,具体的数据类型由调用者决定。函数模板定义方式如下:template <typename T>Type Funname(T x){ ...}其中,template 告诉编译...

2019-08-27 21:39:08 134

原创 【从 C 向 C++ 进阶】- 类 - 23. 构造、析构与虚函数

从 C 向 C++ 进阶系列导航1. 构造、析构与虚函数可否想过,构造函数和析构虚函数可以声明为虚函数吗?答案是,构造函数不能声明为虚函数,而析构函数可以声明为虚函数。虚函数表指针的初始化是发生在构造函数完成之后的,因此,把构造函数编译为虚函数是无意义的。编译时会直接报错。当类作为父类时,应声明析构函数为虚函数。因为对于堆上的类对象,使用关键字 delete 释放堆空间时,假设父类的析构...

2019-08-19 21:10:23 136

原创 【从 C 向 C++ 进阶】- 类 - 22. 多继承

从 C 向 C++ 进阶系列导航1. 多重继承C++ 支持多重继承。所谓的多重继承指的是子类同时继承多个父类,此时子类拥有所有父类的所有成员。继承方式如下:class Derived : public Baes_A, public Baes_B{ ...}多重继承会造成不同的父类指针(或引用)指向(或引用)子类对象时,实际所指向(或引用)的子类地址不一致。如此一来,假设程...

2019-08-15 21:05:25 163

原创 【从 C 向 C++ 进阶】- 类 - 21. 纯虚函数

从 C 向 C++ 进阶系列导航1. 抽象类与纯虚函数抽象类为无实例的类,提出抽象类的意义是满足现实中一些概念的定义,例如:图形、人、动物等。抽象类不能用于创建对象,只能用于作为父类继承。抽象类通过纯虚函数实现,凡拥有纯虚函数的类均称为抽象类。纯虚函数是指只声明函数原型不定义实现的成员函数,声明方法为:virtual void fun() = 0;其中“= 0”是用于告诉编译器当前是...

2019-08-13 22:11:19 151

原创 【从 C 向 C++ 进阶】- 类 - 20. C++ 对象模型

从 C 向 C++ 进阶系列导航1. C++ 对象模型class 类对象的内存分布与 struct 结构体对象的内存分布相同,即遵循内存对齐原则。同时,类对象的内存中只保存成员变量,而成员函数保存在代码段。那么程序中是怎么通过成员对象来调用对应的成员函数呢?实际上,在调用成员函数时,编译器会把对象的地址隐式传递给成员函数,成员函数中用隐式形参指针 this 来接收对象地址,这个传递过程是隐...

2019-07-29 22:22:51 169

原创 【从 C 向 C++ 进阶】- 类 - 19. 虚函数

从 C 向 C++ 进阶系列导航1. 函数重写对于子类中与父类成员函数同名的成员函数,称其为子类的重写函数。函数重写一般发生在父类的成员函数不满足需求的情况下。同时,父子类是相互兼容的:子类对象可以直接赋值给父类对象。子类对象可以直接初始化父类对象。父类指针可以指向子类对象。父类引用可以引用子类对象。子类可以当作父类使用。但当使用父类类型的指针(或引用)调用子类的重写函...

2019-07-28 21:43:36 176

原创 【从 C 向 C++ 进阶】- 类 - 18. 类的继承

从 C 向 C++ 进阶系列导航1. 类的继承类之间可以存在继承关系,又称父子关系,父类又称为基类,子类又称为派生类。父子类之间有以下特点:子类拥有父类的所有属性和行为。子类对象可以当父类对象使用,可增加父类没有的属性和方法。子类对象可以直接初始化为父类对象。子类对象可以直接赋值给父类对象。继承的形式如下:class Parent{ ...};class ...

2019-07-28 21:30:41 229

原创 【从 C 向 C++ 进阶】- 类 - 17. 类的提前声明

从 C 向 C++ 进阶系列导航1. 问题描述在我做类型转换函数博文中最后的实验时,一直遇到了 “error: invalid use of incomplete type ‘class Test_B’” 这个编译错误,报错的源码如下:class Test_B;class Test_A{private: int m_var;public: Test_A(int num) ...

2019-07-24 12:21:03 2023 5

原创 【从 C 向 C++ 进阶】- 类 - 16. 类类型转换

从 C 向 C++ 进阶系列导航1. 类类型隐式转换陷阱C++ 的类类型的转换规则如下:转换函数定义在源对象(转换对象)类中,是转换源对象的成员函数。一旦为转换源类型提供了到目标类型的转化函数,就可以将源类对象以隐式转化的方式转换得到目标类型对象。当没有定义转换函数时,编译器会尽力把源对象转化为目标对象,且容易触发隐私转换,不一定报错。实验:class Test{p...

2019-07-24 12:17:08 223

原创 【从 C 向 C++ 进阶】- 类 - 15. 简单的智能指针

从 C 向 C++ 进阶系列导航1. 智能指针简介为了解决可能发生的内存泄漏问题,C++ 提出了智能指针的概念。智能指针本质上为类对象,具备以下特征:生命周期结束时,自动释放指向的内存空间。只能指向堆空间的内存,不能指向其他空间的内存,因为只有堆空间内存的生命周期是可控的。多个智能指针不能指向同一内存空间,防止重复对相同的内存释放。智能指针不准许进行运算与比较。2. 实现...

2019-07-21 19:00:58 194

原创 【从 C 向 C++ 进阶】- 类 - 14. string 类

从 C 向 C++ 进阶系列导航1. string 类在 C 中,对于字符串的实现采用的是字符数组的方式,并非真正意义上的字符串。因此,C++ 标准库提供了 string 类来实现真正意义上的字符串。string 具备以下特性:支持字符串直接连接,即具备 strcat 函数功能。支持字符串的大小直接比较,即具备 strcmp 函数功能。支持子串直接查找和提取,即具备 strstr...

2019-07-21 18:58:38 171

原创 【从 C 向 C++ 进阶】- 类 - 13. 初识 C++ 标准库

从 C 向 C++ 进阶系列导航1. C++ 标准库简介C++ 标准库(C++ Standard Library),是类库和函数的集合。C++ 编译器厂商根据 C++ 标准委员会官方的 ISO 规范并将其转化为代码。C++ 编译器厂商在实现 C++ 标准库过程中必须依赖其不同操作系统所提供的系统调用接口,因此每个平台都有其自己的 C++ 标准库实现。C++ 标准库的特点如下:C++ 标...

2019-07-21 11:12:36 130

原创 【从 C 向 C++ 进阶】- 类 - 12. 运算符重载进阶

从 C 向 C++ 进阶系列导航1. 重载赋值运算符在需要深拷贝时,除了需要定义拷贝构造函数外,还需要自定义重载运算符 “=” 函数,因为类中默认提供的 “=” 为浅拷贝。在重载运算符 “=” 函数中,必须遵循以下规则:函数返回类型必须为类引用类型。函数形参必须为 const 修饰的类引用类型函数内部必须检查形参对象与函数调用者是否相同,相同是直接返回 *this 或形参对象。...

2019-07-21 11:07:00 159

原创 【从 C 向 C++ 进阶】- 类 - 11. 运算符重载

从 C 向 C++ 进阶系列导航1. 类成员函数重载重载函数的特点如下:重载函数的本质为多个不同的函数。重载函数的函数名和参数列表是唯一标识符。函数重载必须发生在同一个作用域中。类成员函数也允许重载,但只能与同一类内的成员函数构成重载,不能与全局函数或其它类的成员函数构成重载。2. 运算符重载简介为了能够像操作变量一样操作对象,C++ 提高了运算符重载,使用重载后的运算...

2019-07-21 10:51:55 399

原创 【从 C 向 C++ 进阶】- 类 - 10. 友元

从 C 向 C++ 进阶系列导航1. 友元简介友元是 C++ 中的一种关系,友元关系发生在函数与类之间或者类与类之间。友元能够了忽略类的封装属性,即不受访问属性的限制,直接访问类的成员变量或成员函数。友元具备以下特征在类中以 friend 关键字声明友元。友元可以是其它类或具体函数。友元不受类中访问级别的限制,可以直接访问具体类的所有成员。友元不是类的一部分,仅是一种关系的声明。...

2019-07-21 10:27:19 143

原创 【从 C 向 C++ 进阶】- 类 - 9. 二阶构造

从 C 向 C++ 进阶系列导航1. 构造函数的缺陷构造函数存在以下问题:构造函数只提供自动初始化成员变量的机会,不能保证初始化逻辑一定成功。构造函数中申请系统资源可能失败,失败后构造出一个半成品对象。执行 return 语句后构造函数立即结束。构造函数创建的对象可能是半成品对象,而半成品对象是合法的,但是却是十分危险的,容易造成难以定位的段错误等程序异常。因此,实际工程开发...

2019-07-16 22:23:23 156

基于matble的同态滤波算法

基于matble的同态滤波算法,可先识别是否为彩色图还是灰度图,再进行同态滤波处理

2018-05-29

破解quartus II 9.1

破解quartus II 9.1,亲测可用,里面有说明,按说明做就行

2018-04-04

空空如也

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

TA关注的人

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