自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 ARM相关概念

寄存器是一块具备特殊功能的存储空间。两种模式:线程模式、异常模式。

2024-09-19 17:10:52 887 1

原创 QT实现TCP协议

头文件源文件头文件源文件。

2024-09-12 18:54:05 1011

原创 对话框补充和事件机制

该类给用户提供了字体对话框,直接使用该类提供的静态成员函数getFont即可弹出字体对话框该类给用户提供一个颜色对话框,直接调用该类提供的静态成员函数getColor()即可弹出颜色对话框。该类给用户提供了文件对话框,,调用该类提供的两个静态成员函数即,分别是getOpenFileName(), getSaveFileName()。用QFile实例化一个文件对象,该对象可以用文件路径进行构造调用open()打开文件,打开时可以加上打开模式。

2024-09-11 18:38:02 254

原创 多窗口联系

Qss是Qt程序界面中用来设置控件的背景图片、大小、字体颜色、字体类型、按钮状态变化等属性,它是用来美化UI界面。实现界面和程序的分离,快速切换界面。优点:实现简单、便捷对话框消息对话框,字体对话框,颜色对话框,文件对话框消息对话框给用户提供了一种交互式的弹窗,提供两种实现版本,分别是基于属性版本,基于静态成员函数版本。

2024-09-10 18:08:51 440

原创 信号与槽,QMainWindow中常用类的使用

菜单栏,工具栏,状态栏,中心部件,铆接部件(浮动窗口)UI界面文件在Forms文件夹下UI界面可以通过UI指针访问到UI界面上的所有组件确保项目兼容性,能够使得自己的代码在其他电脑能够正常运行,或者发布软件时也能正常运行。步骤将需要的资源放入项目中。给项目增加一个资源文件,存放资源编译qt核心机制:对象树,信号与槽,事件机制信号与槽是qt的核心机制之一,可以实现多个组件之间的连续(通信)信号:信号函数,定义在类体的sginals权限下的函数,信号是一个不完整的函数,只要声明,不要实现。

2024-09-09 18:42:23 518

原创 C++

概念一个类由多个类共同派生。菱形继承又称为钻石继承,由公共基类派生出多个中间子类,又由这些中间子类共同派生汇聚子类,汇聚子类会得到多份中间子类从公共基类继承下来的数据成员在中间子类的继承方式前加上:virtual虚继承后,编译不知该保留哪个中间子类从公共基类继承下来的数据成员,所以编译会自动调用公共基类的无参构造函数,此时如果需要对公共基类的数据成员初始化,则需要在汇聚子类中手动调用公共基类的有参构造函数来完成数据成员的初始化工作。静态多态:函数重载(在编译时)动态多态:(在运行时)

2024-09-04 17:46:17 1754

原创 C++

种类:>,

2024-09-03 18:14:55 1872

原创 C++

格式:类名();作用:让一些函数或一些类,去访问另一个类的私有属性。种类:全局函数作友元,类作友元,成员函数作友元关键字:friend让全局函数访问一个类的私有数据成员让一个类去访问另一个类的私有属性类中所有的成员函数都可以对数据成员做修改操作,如果设计一个成员函数不能对数据成员做修改,则需要使用常成员函数。常成员函数的不能修改数据成员的值常对象:常对象表示该对象的数据成员不可改变格式:const 类名 对象名;运算符重载就是对运算符重新定义,赋予另一种功能,以适应不同的数据类型。

2024-09-02 17:41:38 565

原创 C++中类的相关学习

C语言中动态内存分配和回收使用malloc函数和free函数完成的C++依旧可以使用上述的两个函数完成,动态内存分配和回收C++也可以使用两个关键字new和delete来完成动态内存的分配和回收格式:数据类型 *指针名 = new 数据类型格式:delete 指针名;delete p1;格式:delete []指针名;new,delete特殊的成员函数的种类:构造函数,析构函数,拷贝构造函数,拷贝赋值函数,移动构造,移动赋值,取地址符重载,常取地址符重载。

2024-08-30 18:05:25 2173

原创 C++和QT

public:共有权限,表示该权限下的成员,表示该权限的属性(变量),方法(函数)在类内,子类,类外都能访问。protected:该权限是受保护权限,表示该权限下的属性(变量)、方法(函数),在类内、子类可以被访问,而类外不能被访问。private:该权限是私有权限,该权限下的属性(变量)、方法(函数),只能在类内被访问,子类、类外不可以被访问。

2024-08-29 18:05:23 1127 1

原创 C++和QT

Qt 是一个跨平台的 C++图形用户界面应用程序框架。它为应用程序开发者提供建立艺术级图形界面所需的所有功能。它是完全面向对象的,很容易扩展,并且允许真正的组件编程。

2024-08-28 16:41:33 1364

原创 select练习

2. 利用select 实现 TCP客户端的全双工;1. 完善服务器代码, 做到给所有客户端发送数据;

2024-08-21 18:30:26 226

原创 网络编程-网络基础

IO进程: 进程和进程之间的通信 - 信号 信号量 消息队列 有名管道 无名管道 共享内存 套接字套接字: 不同主机 不同操作系统之间的 进程通信干什么: 实现无线局域网:同一局域网下IP网段一致1) IP地址 是 网络中的 主机的标识, 本质是二进制数字。2) IP采用 点分十进制 表示3) IP分类: 分为 IPV4 和 IPV6 (IPV6表示的范围更广)4) IP长度 32位 (IPV4) 64位(IPV6)5) 每个数据包 必须要携带 目标 IP 和 源IP地址IP=网络号+主机号。

2024-08-19 18:44:02 961

原创 IPC通信

信号虽然属于IPC进程间通信,但是信号本身不能夹带数据,只能发送一个标记信号属于一种终端处理机制。

2024-08-14 18:33:35 794

原创 IPC进程间通信

信号是一种终端机制,程序运行到一半的时候接收到了某种通知,程序就会立刻中断运行,转而去处理通知。一个进程只会接收默认的几个信号如果想要让一个进程接收特定信号的话,必须提前在该进程中登记一下想要接收的信号。

2024-08-13 17:33:13 458

原创 多线程和获取系统时间

第一次调用lock不会阻塞,第二次调用就会阻塞,第三次调用lock开始,返回0,并在互斥锁内部记录lock次数。获取信号量中的一个资源,即信号量的value-1,如果当前信号量的value==0的话,则wait函数阻塞。尝试获取信号量中的一个资源,如果当前信号量的value==0的话,则尝试失败,返回-1,获取成功,返回0。第一次调用lock不会阻塞,第二次调用就会阻塞,第三次调用lock开始,每次调用lock都会返回错误码。仅当无名信号量的value为0时,再次上锁,无名信号量才会产生阻塞。

2024-08-12 19:42:10 711

原创 多线程编译

互斥锁本身是一个数量为1的临界数据,但这个临界数据有原子性,在操作的过程中,不会被其他线程入侵。

2024-08-09 18:44:50 742

原创 多进程编程

一个运行的程序就是一个进程,进程时动态的,程序时静态的平时写的代码未运行时叫程序,运行起来叫进程单核处理器同时运行多进程的运行方式称为:并发多核处理器同时运行多进程的运行方式称为:并行一个进程启动后,系统会为该进程分配4G内存空间。其中0-3G是用户空间,主要是程序员写代码的操作部分。3-4G主要是内核空间,主要是底层驱动部分。其中0-3G的用户空间又划分为栈区,堆区,静态区静态区又划分为4个段:bss段,data段,ro段,txt段。

2024-08-08 20:44:44 821

原创 文件IO与可变参函数

只能操作普通文件和管道文件拥有缓存区属于库函数调用可移植性不同,可以移植到windows或者其他支持c语言的系统中使用使用场景不同,有缓存区,运行效率高,使用在需要高效率运行的场景(针对数据库的大量访问)句柄不同,使用的FILE*的文件流指针来指向文件可以操作绝大部分文件没有缓存区属于系统调用可移植性不同,只能在类unix系统中使用使用场景不同,没有缓存区,运行效率低,但是实时性高,使用在实时性高的场景(网络通信)句柄不同,使用的int类型的文件描述符来指向文件。

2024-08-07 19:14:58 858

原创 标准IO

从stream文件流指针的指向的文件中读取匹配数量的数据(根据文件中数据的类型以及格式占位符的类型进行匹配),遇到不匹配的数据则不吸收,然后将吸收到的数据写入format中格式占位符所代表的地址上去。将ptr指向的内存上面, 总共nmemb项数据,每一项数据size大小,总共nmemb*size个字节的数据,写入 stream指向的文件中去,注意是以数据流的形式去写的。*fscanf是格式化读取文件的函数,需要精准的把控文件中的数据是什么格式,然后使用对应的格式去读取,除非用%c一个字节一个字节的读取。

2024-08-06 21:12:06 1042

原创 标准IO及相关练习

能够将指定的数据写入指定的文件中的操作(通过文件指针去访问指定的文件:FILE*),标注IO只提供写入或者读取操作,不提供删除文件中的内容,想要删除文件,则需要自己写逻辑来实现。功能:让一个文件流指针指向pathname文件,并以mode形式打开该文件,指向文件的文件流指针会以返回值的形式返回。参数:pathname:准备被FILE*指针指向的文件的路径名mode:使用以下提供的几种形式打开。

2024-08-05 18:23:29 809

原创 二叉树的存储

折半查找(二分查找):在顺序存储的有序序列中,通过进行逐次减半查找范围,查找特定的关键字的算法,叫做折半查找。哈希函数的构造方式:直接定址法、数字分析法、平方取中法、折叠法、除留余数法、随机数法。顺序查找:将给定的查找表进行全部遍历一遍,与要查找的关键字进行比对。正确性:对于正确的输入,会给出正确的结果,尽可能少的出现Bug。先打印数据,再打印左节点的数据,最后再打印右节点的数据。先打印左节点的数据,再打印数据,最后再打印右节点的数据。先打印左节点的数据,再打印右节点的数据,最后再打印数据。

2024-08-01 17:36:00 367

原创 链式栈,队列与树形结构

对单向链表进行头插(入栈)、头删(出栈),此时链表的头部就是链栈的栈顶,链表的尾部,就是链栈的栈底。顺序存储的队列(保证存储的数据逻辑上相邻,物理内存上也相连,还要保证符合队列的特点)链式存储的队列(保证存储的数据逻辑上相连,物理内存上随机存储,保证满足队列的特点)需要一个变量记录队尾的位置(最后一个元素的下一个元素的位置)需要一片连续的空间存放数据(数组,堆区的一片连续的空间)需要一片连续的空间存放数据(数组,堆区的一片连续的空间)需要一片连续的空间存放数据(数组,堆区的一片连续的空间)

2024-07-31 17:13:58 742

原创 双向链表,单向循环链表和栈

由于单向链表只能通过指针单向的访问后继节点,不能向前遍历前驱节点,所以要引入双向链表。双向链表:在保持单向链表的基础上,既可以向后遍历后继节点,也可以向前遍历前驱节点。头节点结构体格式:int len;//头节点的数据域普通节点结构体格式:int data;//普通节点的数据域unionint len;//头节点的数据域//普通节点的数据域//指向下一个节点的指针//指向前一个节点的指针函数返回值:节点指针类型注意判断申请的空间是否合法。

2024-07-30 18:07:22 935

原创 单向链表与双向链表

可以解决顺序表存储空间上限,插入和删除效率低的问题链表:链式存储的线性表链表的组成:由一个个节点组成节点:由数据域和指针域组成数据域:存放数据的区域指针域:存放下一个节点地址的指针单向链表,双向链表,循环链表只能通过头节点或者头指针单向的访问后继节点的链表,称为单向链表。每个节点的指针域只记录其后继节点的地址。(火车结构)头节点结构体格式:int len;//头节点的数据域普通节点结构体格式:int data;//普通节点的数据域unionint len;//头节点的数据域。

2024-07-29 17:54:45 1093

原创 数据结构1

数据:计算机能够识别,存储,用来描述客观事物的。数据的种类:数值数据:整数,小数,字符串......非数值数据:图像,视频,音频......数据的组成:数据项--->数据元素--->数据对象--->数据数据项:数据的最小单位,用来组成数据元素。(例:一个学生的学号)数据元素:由数据项组成,用来描述事物特征的。(例:一个学生)数据对象:由属性相同的数据元素组成的数据对象。(例:一个班级)

2024-07-25 19:12:07 1118

原创 结构体笔记

struct 结构名 变量={.成员1=,...,.成员n=} //不按顺序初始化(用". 成员"+成员对应的数据类型的数据)stu s = {18,"11",{1,"名字"},{2,"名字"},{3,"名字"}};结构体是用户自定义的一种数据类型,可以是相同的数据类型,也可以是不同的数据类型的集合。printf("占位符\n",变量.成员1,变量.成员2,...)构造数据类型:数组,指针,结构体,共用体,枚举。变量1={.成员1=,...,.成员n=},变量2={.成员1=,...,.成员n=},

2024-07-24 17:48:54 924

原创 数据结构1

功能:给已有的数据类型重新命名,可以使代码简单易懂格式:typedef 数据类型 新名;//用新名替换原来的变量名//普通类型重定义格式//构造类型重定义格式。

2024-07-23 18:13:39 1017

原创 shell脚本补充和Makefile+GDB

注意:如果makefile(小写)和Makefile(大写)同时存在,则默认执行makefile(小写)作用:当文件未发生修改时,Makefile不对该文件进行编译等操作,节省时间,加快执行速度。定义有参有返函数,如果用户存在,请回答用户是否加密,并返回用户所使用的编译器。如果return后面的表达式的值不在0-255之间,则发生越界,类似C语言。定义有参有返函数,如果用户存在,则返回uid(用户ID),gid(组ID)Makefile是由规则组成的,规则是由目标,依赖,shell指令组成。

2024-07-19 18:47:58 818

原创 shell脚本补充2

判断两个文件是否具备相同的inode(是否是硬链接文件)判断两个文件谁更新判断两个文件谁更旧判断文件存在,且是一个块设备文件-b FILE判断文件存在,且是一个字符设备文件-c FILE判断文件存在,且是一个目录-d FILE判断文件存在-e FILE判断文件存在,且是一个普通文件-f FILE判断文件存在,且是一个链接文件-h FILE-L FILE判断文件存在,且是一个管道文件-p FILE判断文件存在,且是一个套接字文件-S FILE判断文件存在,且不是空文件。

2024-07-18 18:22:28 1074

原创 shell脚本补充

arr=(100 11 22 33) //()是shell中数组的标志。

2024-07-17 18:22:47 602

原创 shell脚本

shell作用:保护内核c/c++:编译型语言,需要使用编译器,执行速度相对快,不可以直接和内核交互shell:解释型语言,需要使用解析器,执行速度相对慢,可以直接和内核交互shell本质就是指令的集合,但是指令需要满足一定的逻辑关系,在使用解析器解析脚本文件是,按照一定的逻辑关系进行执行。

2024-07-16 18:42:02 951

原创 shell指令

grep "^ubuntu$" 文件名 //查找以ubuntu开头且以ubuntu结尾的文件。grep "字符串" 目录名/路径 -r //递归查找字符串在指定路径下的哪些文件中出现。sudo apt remove 软件名 --purge //卸载指定软件,包不被删除。grep "^ubuntu" 文件名 //查找以ubuntu开头的文件。grep "ubuntu$" 文件名 //查找以ubuntu结尾的文件。grep "字符串" 文件名 -w //以单词的形式查找字符串。

2024-07-15 17:36:08 952

原创 指针

值:arr[i]--->*(&arr[0]+i)--->*(arr+i)--->p[i]--->*(&p[0]+i)--->*(p+i)--->*p++地址:&arr[i]--->&arr[0]+i--->arr+i--->&p[i]--->&p[0]+i--->p+i--->p++int* p //p的类型是int*,int表示指针指向地址对应值的类型,表示指针加减运算的偏移量。&arr[0]--->p--->&arr---&p[0] //偏移一个元素。//指针p没有指向,计算机会随机指向一片内存。

2024-07-10 19:05:51 480

原创 函数及二维字符数组的补充

字符串初始化:*{}不可省略//字符串的全部初始化//字符串的部分初始化,剩余元素使用\0填充//省略第一维度,默认是实际的行数单字符的初始化//单字符的全部初始化。

2024-07-09 18:35:05 863

原创 二维数组,一维字符数组和函数组

/存储10个字符,整体是一个字符串。

2024-07-08 19:08:34 821 1

原创 数组及相关练习

数组:使用一段连续的存储空间存储类型相同的构造类型构造类型:可以分割(数组,结构体,共用体)一维数组:使用一个下标表示的数组int arr【】格式:存储类型 数据类型 数组名[常量表达式]*解析*存储类型:auto/static/exterm/register/const/volatie*数据类型:基类型,构造类型,空类型,指针*数组名:满足命名规范*【】:是数组的标志*常量表达式:表示数组元素的个数,定义时不为0,不为空,不为小数,初始值不为变量int arr[5]--->auto int arr[5]

2024-07-05 20:11:06 722

原创 选择机构补充与循环结构

判断时是需要==if (a=5)--->if (5=a) 这种会报错,赋值等号左边必须是变量判断整数a的值为0判断整数a不会0if (a!switch的执行速度最快格式:switch(表达式)case 常量表达式1:执行操作 break;case 常量表达式2:执行操作 break;case 常量表达式3:执行操作 break;case 常量表达式4:执行操作 break;case 常量表达式5:执行操作 break;.......case 常量表达式n:执行操作 break;

2024-07-04 18:19:39 952

原创 类型转换,输入输出,运算符与控制结构

若表达式1为假,则判断表达式2,如果表达式2为真,则执行c语句2结束;(a>='A'&&a<='Z'||a>='a'&&a<='z'||a>='0'&&a<='9')输入用户名和密码,如果用户名和密码正确则登录成功,否则失败,默认用户名为A,密码是1234。判断变量char a是否为大写:a>='A'&&a<='Z'判断变量char a是否为小写:a>='a'&&a<='z'判断变量char a是否为数字:a>='0'&&a<='9'*表达式:可以是任意表达式,但是一般是算数,关系,逻辑组成。

2024-07-03 19:04:08 940

原创 进制转换与数据类型

short--->signed short int(有符号短整型)查看取值范围:vim/usr/include/limits.h。long--->signed long int(有符号长整型)double a,b,c;//当类型一致时,可以定义多个变量。//当类型一致时,可以定义多个变量。int a,b,c;//当类型一致时,可以定义多个变量。-128-127--->0-127 共有128个字符。'0'--->48 '0'-48可把'0'转换为0。一般宏名大写:宏大写,变量小写,函数名驼峰/下划线。

2024-07-02 19:01:47 1020

关于嵌入式软件学习的c基础部分思维导图

关于嵌入式软件学习的c基础部分思维导图

2024-07-01

空空如也

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

TA关注的人

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