- 博客(29)
- 收藏
- 关注
原创 管道通信Linux
Linux系统提供了两种管道通信机制:无名管道和有名管道。无名管道用于父子进程间通信,通过pipe()创建,fork()共享,单向传输数据;有名管道(FIFO)通过mkfifo()创建文件节点,允许不相关进程通过文件路径访问。两种方式都遵循读写阻塞机制,无名管道生命周期随进程结束,有名管道需手动unlink()删除。管道是Linux重要的进程间通信方式,实现简单高效的数据传输。
2025-07-08 18:17:31
508
原创 SQL数据类型
数据类型描述示例适用场景INT整数类型,存储没有小数部分的数字25-100存储一般整数(如 ID、数量)TINYINT存储非常小的整数值5-3存储小范围的整数值(如标志值)FLOAT单精度浮动数值,精度较低3.14-2.71存储范围大但精度要求不高的浮点数DOUBLE双精度浮动数值,精度较高3.14159存储精度要求较高的浮动数值DECIMAL定点数,精确的小数值123.45-56.78金融、货币数据,精度要求高的小数值。
2025-04-24 20:53:35
779
原创 SQL 语法
SQL(Structured Query Language,结构化查询语言)是一种用于与数据库进行交互的标准编程语言。SQL 语法主要用于查询、更新、插入和删除数据库中的数据。以下是一些常见的 SQL 语法解释
2025-04-24 20:51:47
854
原创 什么是硬件流控制(Hardware Flow Control)
硬件流控制(Hardware Flow Control) 是一种用于串行通信中的数据传输控制机制,它通过使用额外的硬件信号来管理发送方和接收方之间的数据流,以避免由于缓冲区溢出、数据丢失或通信错误而导致问题。硬件流控制主要依赖于一些专门的信号线来进行通信设备之间的协调。
2025-04-21 21:08:47
1059
原创 STM32中APB2中常见的外设功能及其初始化过程
STM32 提供了丰富的外设资源,包括 GPIO、USART、SPI、I2C、ADC、定时器等。每种外设都有其特定的功能和应用场景,开发者可以通过配置相应的寄存器来初始化和控制这些外设,完成各种硬件交互操作。使能外设的时钟。配置外设的工作模式(如波特率、数据位、时钟频率等)。使能外设的相关功能。进行数据传输或控制操作。通过正确初始化外设,STM32 能够实现多种功能,从而满足不同的嵌入式应用需求。
2025-03-19 19:32:35
923
原创 回溯算法的优化技巧
组合和排列问题:求解从集合中选取元素的所有可能组合或排列。路径搜索问题:比如迷宫问题,求解从起点到终点的路径。约束满足问题(CSP):如N皇后问题,图着色问题,数独问题。分割问题:如背包问题的部分解空间探索。回溯算法的核心思想是通过递归尝试所有可能的路径,并在不符合约束的情况下回溯,逐步修正选择,直到找到解。在处理回溯问题时,通常要注意如何优化搜索过程,例如通过剪枝、记忆化或者启发式搜索来减少解空间的大小。复杂度分析是回溯算法非常重要的部分,通常需要根据问题的特点进行合理的优化。
2025-03-04 21:58:05
1234
原创 回溯算法(皇后问题)
回溯算法的核心就是递归地尝试不同的选择,并且在某一步发现当前选择不可行时,撤销选择并继续尝试其他可能性。通过这种“试探+撤销”的方式,回溯算法能够解决许多组合优化、约束满足等问题。
2025-03-04 21:53:04
316
原创 继承(Inheritance)和组合(Composition)各自特点
继承(Inheritance)和组合(Composition)是面向对象编程中的两个常用概念,它们都是用来设计类之间关系的方式。它们各有特点,并且适用于不同的情景。继承是面向对象编程中的一种关系,允许一个类继承另一个类的属性和方法。通过继承,子类可以继承父类的功能,并且可以增加或修改(覆盖)一些特定功能。继承的优缺点:优点:缺点:组合是另一种面向对象设计的方法,它强调**“拥有一个”关系**,通过将一个对象作为另一个对象的成员来实现功能的组合。组合表示一个类是由其他类的对象构成的。组合的优缺
2025-02-28 11:56:26
724
原创 sscanf 函数简介
sscanf是 C 中强大的字符串解析工具,能够按照指定的格式从字符串中提取数据。使用字符类([a-z][^,]等)可以灵活控制匹配规则,允许你精确提取字符串中的信息。通过格式说明符、字符类、宽度限制等功能,可以轻松解析复杂的数据格式。处理过程中需要注意缓冲区大小、格式匹配等潜在问题,确保程序的健壮性和安全性。
2025-02-28 11:53:08
718
原创 面向对象设计原则
设计原则优点缺点适用场景开放封闭原则 (OCP)易于扩展,降低修改现有代码的风险设计复杂,可能导致过度抽象需求变动频繁的系统,插件化架构依赖倒置原则 (DIP)高层模块与低层模块解耦,增强系统灵活性增加了系统复杂性,依赖注入实现可能难以调试大规模系统,解耦模块之间的依赖关系接口隔离原则 (ISP)增强灵活性,减少不必要的依赖接口数量增加,可能导致过度设计复杂系统,模块功能细分的场景里氏替换原则 (LSP)继承关系清晰,子类能够替代父类,增强多态性。
2025-02-23 17:23:39
1078
原创 C 语言文件操作
在 C 语言中,文件操作是通过标准库中的文件输入输出函数来实现的。最常用的文件操作函数包括读取和写入文件的函数。这些文件操作函数为 C 语言程序提供了处理文本文件和二进制文件的基本能力,灵活使用可以有效处理不同类型的文件读取和写入需求。当文件操作完成后,需要关闭文件,这样可以确保所有的文件操作都已经完成,并且释放文件资源。函数从文件中读取指定大小的字节数据,通常用于读取二进制文件。函数从文件中读取下一个字符并返回,读取到文件末尾时返回。函数用于打开一个文件,返回一个文件指针(函数将一个字符写入到文件。
2025-02-23 17:10:40
644
原创 dynamic_cast ( C++ 中的一种类型转换运算符)
dynamic_cast是 C++ 中的一种类型转换运算符,主要用于在类层次间进行类型转换,特别是在继承体系中,进行上行转换(向基类转换)和下行转换(向派生类转换)。此外,它也可以用于在某些特殊情况下进行类之间的交叉转换。
2025-02-19 10:41:14
679
原创 头结点(Head Node)在链表中的作用:
在链表的实现中,头结点(也叫哑结点或虚拟头结点)通常不存储实际的数据,只作为辅助作用,帮助简化链表操作。头结点存在的原因主要是为了避免在链表为空或删除头节点时的特殊情况,使得代码结构更加统一和简洁。
2025-01-21 16:35:29
861
原创 用C语言代码实现多态(以计算器为例)
在C语言中,我们无法直接使用C++的多态特性,但是我们可以通过函数指针来模拟多态性。为了应用多态的思想,接下来我们将为不同的运算(加法、减法、乘法、除法)创建不同的结构体,并通过函数指针模拟虚拟函数的行为。
2025-01-18 22:18:21
446
原创 在C语言中实现封装、继承和多态
在C语言中,没有直接的支持封装、继承和多态等面向对象特性。C语言是结构化编程语言,通常通过函数和数据结构(结构体)来实现类似的功能。我们可以通过结构体、函数指针、和手动管理的对象生命周期来模拟C++中的面向对象的特性。
2025-01-18 21:23:05
976
原创 cv(const-volatile)属性的作用
表示类型的 const 和 volatile 修饰符。它们用来修饰变量或对象,影响变量的行为,主要和变量的可修改性和编译器优化相关。
2025-01-15 22:30:43
628
原创 new 和 delete 的工作原理
在 C++ 中,new 和 delete 是用于动态分配和释放内存的运算符。与 C 中的 malloc 和 free 不同,new 和 delete 是 C++ 的语言特性,不仅负责分配/释放内存,还会调用对象的构造函数和析构函数。
2025-01-15 22:13:57
652
原创 Makefile
Makefile 用于自动化管理代码编译,基本结构是 目标: 依赖 + 命令。常用技巧:使用变量简化 Makefile。定义清理目标(如 clean)。使用 make 自动生成目标文件,节省时间。
2025-01-15 21:51:24
720
原创 C++ 中的构造函数详解
构造函数(Constructor)是 C++ 类的一种特殊成员函数,在创建类对象时自动调用,用于初始化对象的成员变量。构造函数的名字与类名相同,没有返回值。
2025-01-14 19:08:55
973
原创 内存四区(代码区、全局/静态区、栈区和堆区)
在 C++ 程序的执行过程中,程序的内存分布大致可以划分为内存四区,这些区域被用于存储程序的各种数据。内存四区的划分包括 代码区、全局/静态区、栈区和堆区。
2025-01-12 21:12:21
2038
原创 C++ 对 C 函数的主要扩展
函数重载:同名函数可以根据参数列表重载。默认参数:可以省略部分参数。内联函数:替代宏,提高效率。模板函数:泛型编程,减少代码重复。右值引用:支持高效的移动语义。Lambda 表达式:简化内联函数定义。如果你有具体的需求或想了解某个扩展的细节,随时告诉我。
2025-01-08 18:40:20
475
原创 复杂类型函数指针的传递
函数指针的基本概念函数指针的声明返回类型 (*函数指针名称)(参数列表);// 指向一个返回类型为 int,参数为 int 和 float 的函数指针函数指针作为函数参数返回类型 函数名(函数指针类型);函数指针数组返回类型 (*函数指针数组名称[大小])(参数列表);// 一个大小为 3 的数组,每个元素是一个函数指针函数返回函数指针返回类型 (*函数名(参数列表))(参数列表);// 一个函数,返回一个函数指针复杂类型函数指针的传递1. 函数指针作为函数参数。
2025-01-03 21:41:42
592
原创 C语言中的野指针
在C语言中,这种指针并未明确初始化,或者其指向的内存已经被释放或无效化。这些指针一旦被访问,会导致不可预料的行为,通常包括程序崩溃、内存泄漏甚至安全漏洞。野指针(Dangling Pointer)是指向。
2025-01-03 21:39:32
836
原创 在C++相比typedef,using在模板场景下的简洁和强大之处
传统 typedef 的写法在使用typedef// 使用 typedef 定义模板类型别名// 等价于 std::vectorreturn 0;使用 using 的写法使用using// 使用 using 定义模板类型别名// 等价于 std::vectorreturn 0;using关键字相对于typedef更加简洁,特别是在模板场景中。它可以定义带模板参数的类型别名,也可以为复杂类型(如多模板参数类型和智能指针)创建清晰的别名。
2024-12-30 19:43:47
409
原创 std::cin 和 std::getline异同
在 C++ 中,std::cin和 std::getline都是用于从标准输入读取数据的方式,但它们有一些关键的相同点和不同点。
2024-12-29 19:17:59
1341
原创 static
在 C 语言中,static 是一个存储类修饰符,用于管理变量或函数的作用域和生命周期。根据它的使用位置不同,static 可以用来定义局部变量、全局变量以及函数。
2024-12-29 11:30:05
2674
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅