- 博客(65)
- 资源 (1)
- 收藏
- 关注
原创 09.【C语言学习笔记】指针(一)
C语言1.内存和地址的关系,指针==地址;2.指针变量=>存放地址的变量,取地址操作符&和解引用*操作符的使用,指针变量的大小和操作系统32、64位有关;3.指针变量类型的意义,+-整数,void*指针的用处;4.const修饰指针(在*前/后);5.指针运算(+-整数、指针-指针);6.野指针;7.assert断言(可以#define NDEBUG直接取消所有断言);8.指针传址调用;
2025-06-24 20:17:01
956
原创 08.【C语言学习笔记】操作符
C语言操作符的分类;2、8、10、16进制之间的相互转换;原码、反码、补码之间的相互转换;、移位操作符的使用;位运算操作符的使用;单目操作符;逗号表达式;下标访问[]、函数调用()操作符的使用;操作符的属性:优先级、结合性;表达式求值:整型提升、算术转换、问题表达式的解析。
2025-06-24 12:07:55
769
原创 04.【Qt开发】内存泄漏解释(对象树概念)、乱码问题解释及修改
本文主要介绍了Qt中的对象树机制和字符编码问题。对象树是Qt管理内存的核心机制,通过parent指针建立父子关系,父对象销毁时会自动销毁所有子对象。文章通过示例说明在堆上创建对象并指定parent的重要性,避免内存泄漏和重复析构问题。同时分析了乱码问题的成因,指出编码方式不匹配是根本原因,对比了GBK和UTF-8编码的区别,并推荐使用qDebug()替代cout来避免乱码。最后总结了QLabel使用、对象树机制、自定义控件扩展和字符编码处理等关键知识点,强调在Qt开发中应遵循对象树规范和正确使用调试工具。
2025-06-23 19:11:46
835
原创 07.【C语言学习笔记】函数递归
C语言递归的概念,递归的限制条件(限制条件非常重要,递归必须有限制条件和逼近条件,不然递归无法完成);递归举例1:求n的阶层;递归举例2:顺序打印一个整数的额每一位;递归与迭代:递归简单清晰,迭代占用资源少但是代码可能繁琐;迭代举例3:求第n个斐波那契数(青蛙跳台问题其实就是斐波那契数问题)
2025-06-23 08:36:08
784
原创 06.【C语言学习笔记】函数
C语言函数的概念(函数也叫子程序);库函数的网址;自定义函数的语法形式;实参和形参及其关系的解释;return 语句的注意事项;数组做函数参数的规则;函数的链式访问(printf函数返回的是打印在屏幕上的字符的个数);函数的定义和声明:static 和 extern 关键字修饰变量和函数的作用。
2025-06-23 08:35:06
1022
原创 04.【C语言学习笔记】数组
C语言数组元素的类型、数组类型(两者不同);数组的初始化(不完全初始化、完全初始化);下标引用操作符[];一维数组在内存中的存储/二维数组在内存中的存储(顺序存储)、计算数组元素的个数(sizeof);二维数组的初始化;变长数组的概念及使用;Windows中的延时函数、清空cmd窗口的命令
2025-06-17 21:50:34
855
原创 03.【C语言学习笔记】分支和循环
C语言else的悬空问题;关系操作符(比较运算符);条件操作符(三目操作符);逗号表达式;逻辑操作符(&&、||、! 与或非);switch语句:switch、case、break、default;continue;break;goto跳转语句;随机数的生成(rand、srand、time函数的作用及使用、指定范围的随机数生成公式)
2025-06-17 21:49:43
955
原创 02.【C语言学习笔记】C语言数据类型和变量
C语言各种数据类型的列举;signed和unsigned;数据类型的取值范围(各种数据类型的最大最小值宏定义);全局变量和局部变量及存放位置;算数运算符;赋值运算符;单目运算符;强制类型转换的作用;printf占位符列举、怎样限定宽度、怎样显示正负号打印、怎样限定小数位数、怎样输出部分字符串(限定字符串输出位数);scanf的返回值、scanf连续输入的使用,占位符,赋值忽略符,
2025-06-16 22:06:41
918
原创 01.【C语言学习笔记】C语言常见概念
C语言学习笔记(不容易记住的知识点)C语言介绍;VS的使用技巧(设置字体、快捷键、调试、查找函数定义、正常使用scanf);printf的含义(占位符、限定宽度、显示正负号、限定小数位数、输出部分字符串);关键字介绍展示;ASCll编码表;转义字符;语句和语句分类(空语句、表达式语句、函数调用语句、复合语句、控制语句);注释 /**/ 不支持嵌套注释
2025-06-16 22:03:28
356
原创 21.【C++11】(“{}”列表初始化、右值引用和移动语义、引用折叠和完美转发)
C++11引入了多项关键特性。在列表初始化方面,C++11统一了初始化方式,支持内置类型和自定义类型的{}初始化,并引入std::initializer_list支持容器初始化。右值引用和移动语义是核心改进,通过区分左值/右值、左值引用/右值引用,实现了资源的高效转移。文章详细解析了移动构造/移动赋值的实现原理,及其在传值返回和容器操作中的应用场景。此外,还探讨了完美转发机制,通过引用折叠和forward模板保持参数原始类型属性。这些特性共同提升了C++的性能表现和代码简洁性
2025-05-31 18:59:21
564
原创 03.【Qt开发】Qt新建初始代码介绍、实现界面打印helloworld
本文介绍了Qt应用程序开发的基础知识,包括项目结构、编译过程和两种实现"Hello World"的方式。主要内容涵盖:1. Qt项目文件结构(.pro文件配置说明,头文件和源文件组织);2. QApplication核心类的作用。两种实现“helloworld”的方法:1. 图形化界面设计方法;2. 纯代码实现控件创建。
2025-05-29 17:05:11
1022
原创 02.【Qt开发】Qt Creator介绍及新建项目流程
本文详细介绍了Qt Creator集成开发环境的使用方法。第一部分讲解了如何创建桌面快捷方式,并详细说明了Qt Creator的界面布局和功能模块,包括菜单栏、模式选择、构建套件选择器等8个主要组成部分。第二部分重点介绍了新建项目的完整流程:从模板选择到项目配置,详细说明了location、构建系统、Details、Translation等步骤的设置要点。文章还对编辑界面的各个功能区域进行了说明,包括左边栏的文件管理、代码编辑区的导航功能、UI设计界面的组件拖放以及构建区的运行调试选项。
2025-05-27 19:13:01
1301
原创 20.【C++进阶】用哈希表封装myunordered_map和myunordered_set
本文分析了哈希表的实现框架,并模拟实现unordered_map和unordered_set。模拟实现中,通过HashTable模板类复用哈希表功能,分别定义MapKeyOfT和SetKeyOfT仿函数来提取键值。迭代器实现采用单链表思路,难点在于operator++处理跨桶遍历。最终实现的unordered_map支持[]操作符,通过修改insert返回pair<iterator,bool>实现。
2025-05-27 17:15:00
890
原创 19.【C++进阶】unordered_map和unordered_set的使用、哈希表的实现
本文主要介绍了哈希表及其实现方式。首先分析了unordered_set和unordered_map与set/map的差异,包括key要求、迭代器特性和性能比较。随后详细讲解了哈希表的核心概念,包括哈希函数设计(除法散列、乘法散列、全域散列等)、哈希冲突处理方法(开放定址法和链地址法)。重点实现了两种冲突解决方案:线性探测的开放定址法和哈希桶的链地址法,并讨论了扩容策略、负载因子控制等关键技术点。文章还探讨了key类型转换、字符串特化等实际问题,为理解和实现高效哈希容器提供了完整的技术路线。
2025-05-26 17:22:55
1143
原创 18.【C++进阶】封装红黑树实现mymap和myset
本文分析了map和set的源码实现,重点探讨了其核心框架和红黑树(rb_tree)的泛型设计。map和set通过红黑树实现,map存储键值对,set仅存储键。文章还讨论了红黑树的插入、删除和查找操作,并指出源码中命名风格的不一致性。接着,文章模拟实现了map和set,复用了红黑树框架,并通过仿函数解决了插入时的比较问题。最后,文章详细介绍了迭代器的实现,包括++和--操作符的逻辑,并展示了如何通过红黑树实现map的[]操作符。整体上,文章通过源码分析和模拟实现,深入探讨了map和set的底层实现机制。
2025-05-26 17:21:41
586
原创 17.【C++进阶】红黑树实现(二叉搜索树,通过对任何一条从根到叶子的路径上各个结点的颜色进行约束)
红黑树是一种自平衡的二叉搜索树,通过在每个节点上增加颜色标记(红色或黑色)并遵循特定规则,确保树的高度平衡。其核心规则包括:根节点为黑色、红色节点的子节点必须为黑色、从任一节点到其子节点的路径上黑色节点数量相同。这些规则保证了红黑树的最长路径不超过最短路径的两倍,从而维持近似平衡。红黑树的插入操作通过变色和旋转(单旋或双旋)来维护平衡,时间复杂度为O(log n)。与AVL树相比,红黑树的平衡要求较为宽松,旋转次数较少,适合频繁插入和删除的场景。红黑树广泛应用于C++ STL中的map和set等容器。
2025-05-23 12:16:46
1022
原创 16.【C++进阶】AVL树的实现(自平衡二叉查找树,通过控制高度差去控制平衡)
文章讲述了AVL树,AVL树是一种自平衡二叉搜索树。其核心特性是左右子树的高度差绝对值不超过1,通过平衡因子(右子树高度减左子树高度)来维护平衡。AVL树的高度控制在logN,使得增删查改操作的时间复杂度为O(logN),相比普通二叉搜索树有显著提升。插入操作时,按二叉搜索树规则插入后,更新路径上的平衡因子,若出现不平衡则通过旋转(左旋、右旋、左右双旋、右左双旋)恢复平衡。AVL树的查找与普通二叉搜索树相同,效率为O(logN)。以及AVL树的实现
2025-05-23 12:11:24
717
原创 01. 【Qt开发】Qt介绍及Qt开发环境搭建(2025.05最新下载方式)
Qt简介(发展史、支持的平台、版本、优点及应用场景的介绍);Qt SDK安装流程-2025.05最新版官方下载安装流程,包括步骤的详细注释说明。
2025-05-22 18:34:29
1869
2
原创 结课作业自选01. 内核空间 MPU6050 体感鼠标驱动程序(二)(完整实现流程)
本文介绍了基于MPU6050传感器的体感鼠标驱动程序的实现流程。代码通过I2C总线与MPU6050通信,读取加速度数据并转换为鼠标位移,同时支持按键检测功能。主要流程包括:模块加载时自动注册I2C驱动,设备树匹配成功后执行探测函数mpu_mouse_probe,初始化设备并启动定时器。定时器到期后触发回调函数timer_callback,调度工作队列处理函数accel_work_handler,读取加速度数据并应用低通滤波,最终通过虚拟鼠标控制实现体感功能。代码还包含GPIO初始化、按键去抖动等细节处理。
2025-05-22 08:29:29
913
原创 结课作业自选01. 内核空间 MPU6050 体感鼠标驱动程序(一)
1. linux嵌入式系统内核介绍,内核程序的编写,包括必要的流程和函数。2. 几个内核驱动的示例:内核获取gpio状态,内核控制led灯,内核实现mpu6050体感鼠标。包括实现流程、代码详解、函数解释、执行指令等。
2025-05-22 08:28:53
650
原创 结课作业03. 混杂设备驱动led流水灯实现
本文介绍了如何在Linux内核中编写一个混杂设备驱动程序(gpios-misc-drv.c),控制3个LED灯。该驱动程序通过写入/读出3个字节来设定和读取3个GPIO引脚的电平状态,每个字节代表一个引脚。驱动程序加载后会自动生成/dev/gpio-misc设备节点。文章详细描述了驱动程序的实现流程,包括模块初始化、GPIO引脚配置、混杂设备注册、文件操作结构体定义以及read和write函数的实现。此外,还提供了一个应用程序(gpios-misc-app)的伪代码,展示了通过调用驱动程序实现流水灯效果。
2025-05-21 15:45:04
975
原创 结课作业01. 用户空间 MPU6050 体感鼠标驱动程序
linux开发板通过uinput创建虚拟鼠标,通过mpu6050的加速度数据控制体感鼠标移动,使用开发板的按键模拟鼠标左右键,包括功能实现流程、函数详解及源代码。完成虚拟体感鼠标功能实现。
2025-05-21 15:41:37
1414
原创 15.【C++进阶】map和set的使用(关联式容器)
文章介绍了C++ STL中的序列式容器和关联式容器,重点讲解了set和map系列的使用。set用于存储唯一键值,map用于存储键值对,两者都支持迭代器遍历和自定义比较函数。multiset和multimap则允许键值重复。文章还详细介绍了set和map的构造、增删查操作,以及如何使用迭代器和[]操作符进行数据修改。最后,通过示例代码展示了如何利用map统计水果出现次数,并对比了multimap与map的差异。
2025-05-20 10:12:21
770
原创 03. Linux嵌入式系统学习笔记(三)(用户空间驱动程序练习:体感光标实现mpu+i2c+framebuffer)
本文章讲解了linux嵌入式开发板的四个实例:1.shell脚本实现流水灯。2.i2c接收mpu6050的数据并转换成加速度打印。3.framebuffer在屏幕映射虚拟内存,操作虚拟内存在频幕上打印光标。4.根据2和3实现体感光标可控制。
2025-05-12 09:00:00
586
原创 0X. Linux嵌入式系统(课堂笔记)
虚拟机linux与开发板通过usb连接;通过网络将虚拟机和开发板进行桥接并实现文件的拷贝提取等操作,在开发板实现白屏、按键使用等案例
2025-05-08 16:19:48
792
原创 14.【C++进阶】二叉搜索树(二叉搜索树的增、删、差及代码实现,key_value的概念及实现)
C++二叉搜索树(BST)是一种有序二叉树,左子树的值≤根节点,右子树的值≥根节点,支持高效查找、插入和删除。理想情况下时间复杂度为O(logN),但若退化为单支树则降至O(N)。插入和查找通过值比较定位位置;删除分四种情况处理,双子节点时采用替换法。文档提供了C++实现代码,并区分了纯Key搜索(如车牌识别)和Key/Value搜索(如字典翻译)的应用场景。由于BST可能不平衡,需进一步学习AVL树或红黑树来优化性能。
2025-04-21 09:09:41
819
原创 13.【C++进阶】多态(多态的定义、概念及实现,虚函数和抽象类)
C++的多态机制,包括编译时多态(如函数重载)和运行时多态(通过虚函数实现)。运行时多态需满足两个条件:基类指针或引用调用虚函数,且派生类重写该虚函数。文件详细解析了虚函数表、动态绑定与静态绑定的区别,以及纯虚函数和抽象类的作用。此外,还介绍了协变、析构函数重写、override和final关键字,并通过代码示例说明多态的实现原理和应用场景。
2025-04-14 09:48:26
814
原创 12.【C++进阶】继承(继承的概念和使用、基类成员的访问、作用域、虚继承)
C++继承的概念和使用、继承基类成员的访问方式的变化、继承类模板;基类和派生类的作用域、隐藏规则;派生类的默认成员函数;继承与友元、继承与静态成员;多继承、虚继承、菱形继承;继承和组合的介绍及代码示例。
2025-04-07 18:33:00
1072
原创 11.【C++】模板进阶(函数模板特化、类模板全特化和偏特化、模板的分离编译)
C++模板的分类:类型形参模板和非类型形参模板。模板特化的概念及使用:函数模板特化,类模板特化(全特化、偏特化)。模板的生命和定义推荐放在一个文件中。模板的优缺点
2025-03-31 14:20:56
765
原创 10.【C++】stack(栈)、queue(队列)和priority_queue(堆)的使用及模拟实现
C++stack(栈)、queue(队列)和priority_queue(堆)的介绍及使用,及通过vector、list、deque的封装模拟实现stack、queue、priority_queue。容器适配器的概念介绍。
2025-03-27 13:19:14
947
原创 00.【Linux系统编程】 Linux初识(云服务器设置CentOS并使用、Xshell链接云服务器)
Linux初识(云服务器设置CentOS并使用、Xshell链接云服务器),华为云免费申请一个月的云服务器;下载Xshell,并通过Xshell连接华为云服务器进行操作。
2025-03-27 13:08:26
636
原创 02. Linux嵌入式系统学习笔记(二)(编写C程序进行文件操作、模块化编程makefile的使用)
Linux系统级文件I/O通过open/read/write/close实现低层文件读写,结合临时文件与rename确保数据安全;模块化编程使用头文件声明接口与源文件分离实现,借助Makefile的变量、依赖规则及自动变量($@, $^)自动化编译,实现增量构建与高效代码管理。
2025-03-26 13:43:22
870
原创 01. Linux嵌入式系统学习笔记(一)(linux基础指令)
本文通过一系列实战练习,系统性地介绍了 Linux 系统管理、Shell 脚本编程及内核源码分析的核心操作。涵盖文件管理、进程控制、网络文件系统(NFS)配置、磁盘镜像操作等基础技能,并结合三个实际脚本案例(贡献者统计、危险函数检测、内核彩蛋查找),深入解析 Shell 脚本的编写与优化方法。
2025-03-21 20:18:39
952
原创 09.【C++】list链表(STL中的列表容器,C++封装的带头双向链表,可实现指定类型的增删查改,迭代器操作等功能)
C++list的介绍及使用,list相当于C++集成的链表的库(list使用模板定义,使用时要指定数据类型),可实现增删查改,迭代器操作等功能。本文介绍了常见list接口的使用以及list的模拟实现。
2025-03-17 11:19:01
792
原创 08.【C++】vector(STL中的序列容器,C++封装的顺序表,可实现指定类型的增删查改、迭代器操作等功能)
C++vector的介绍及使用,vector相当于C++集成的顺序表的库(vector使用模板定义,使用时要指定数据类型),可实现增删查改,空间大小查看,迭代器操作等功能。本文介绍了常见vector接口的使用以及vector的模拟实现。
2025-03-10 18:58:42
586
原创 07.【C++】STL简介和string类的使用(string类对象的输入cin>>、输出<<、尾插+=、访问[ ]、获取对象size、capacity等以及string类的模拟实现)
C++string类的使用,string类的函数,对字符串的各种操作,包括:构造、拷贝构造、获取字符串对象大小size、获取空间大小capacity、string类对象的访问operator[]的运算符重载;string对象的插入insert、尾插append,operator+=、删除erase等;string类对象的cin输入>>,cout输出<<等。本文介绍了常见string接口的使用以及string的模拟实现。
2025-03-03 21:34:28
920
原创 06.【C++】模板初阶(template<typename T>,充分复用函数,函数模板和类模板的使用)
C++函数模板和类模板的使用(用模板解决相同功能的函数处理不同类型变量复用的问题,想一想活字印刷术。想到自己写Swap,需要Swap(int a, int b),Swap(double a, double b),用模板只需要写一个template<typename T> void Swap(T a, T b),可解决上述一类的问题
2025-02-25 10:54:36
1013
原创 05.【C++】内存管理(C++内存申请new,释放delete的概念及使用[代替C语言中的malloc和free],递归出现栈溢出的原因)
C++内存申请new,释放delete的概念及使用(用来代替C语言中的malloc和free),堆、栈空间大小,为什么递归时可能出现栈溢出,new和delete的实现原理。
2025-02-17 21:38:47
922
原创 04.【C++】类和对象(下)(初始化列表、static静态成员、友元friend[类外函数使用类私有成员]、内部类、匿名对象等)
C++的初始化列表的使用及约束条件(引用成员变量,const成员变量,没有默认构造的类类型变量,必须放在初始化列表位置进行初始化,否则会编译报错。),类型转换,static静态成员的用法,友元声明(突破类的访问限定符,外部函数可以使用类的私有和保护成员),内部类,匿名对象,对象拷贝时编译器的优化。
2025-02-17 14:21:34
1275
原创 03.【C++】类和对象(中)(构造函数-函数名与类名相同的成员函数、析构函数、拷贝构造函数、赋值运算符重载等定义及使用)
C++默认成员函数介绍及使用,包括:构造函数(函数名与类名相同的成员函数),析构函数(函数名为类名前加~),拷贝构造函数(函数名与类名相同的构造函数的重载),赋值运算符重载,取地址运算符重载。以及日期类的实现(日期加减)。附有相关示例及文字解释。
2025-02-15 16:26:51
1048
C++stack(栈)、queue(队列)、priority-queue(堆)的模拟实现
2025-03-03
C++list的模拟实现
2025-02-27
C++日期类的实现,包括日期+,+=,-,-=和>,<,>=,<=,==,!= ;日期 - 日期 得天数 ;流提取>>,流插入<< 运算符重载等
2025-02-15
C++vector的模拟实现
2025-02-25
C++string类的模拟实现
2025-02-21
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人