自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux——进程间、线程间的通信

sem_t。

2025-08-18 20:57:42 784

原创 Linux软件编程——线程(2)

5. 销毁锁:int pthread_mutex_destroy(pthread_mutex_t *mutex);4. 解锁:int pthread_mutex_unlock(pthread_mutex_t *mutex);3. 加锁:int pthread_mutex_lock(pthread_mutex_t *mutex);1. 分离属性:不需要被其他线程回收的线程称为分离属性得到线程,将来会被操作系统所回收。2. 非分离属性:可以被其他线程回收或者结束的线程,称为非分离属性的线程。

2025-08-18 20:47:45 549

原创 Linux系统——进程与线程

轻量级的进程,可实现多任务的并发。进程是操作系统资源分配的最小单位;线程是操作系统任务调度的最小单位。

2025-08-15 19:00:52 981

原创 Linux系统——多任务操作

正在运行的程序,其运行过程中需要消耗内存和CPUgcc应用程序 可执行程序 内存硬盘 硬盘 cpu。

2025-08-14 18:49:05 1058

原创 Linux编程 —— framebuffer

framebuffer:帧缓冲,帧缓存技术Linux内核专门为图形化显示提供的一套应用程序接口。

2025-08-13 20:56:59 1319

原创 Linux操作系统——文件操作(3)

文件IO:系统调用Linux内核专门为应用层提供的文件操作方法。

2025-08-12 20:22:01 1112

原创 Linux操作系统 ——文件操作2

pragma pack 是 编译器指令,用于控制结构体的 内存对齐方式:#pragma pack(push, n):保存当前对齐方式,并设置新的对齐字节数 n(n=1 表示1字节对齐)#pragma pack(pop):恢复之前保存的对齐方式。该结构体中的字节数只有9个,但实际所占内存为12;当他们以字节对齐,实际上也就只占了9个如:查看bmp图片的像素例题说明:①#pragma pack(push, 1) 的作用取消结构体对齐优化,使所有字段紧密排列(无填充字节)。

2025-08-11 20:15:23 752

原创 Linux操作系统

普通文件 ------->xxx.c xxx.h xxx.txt xxx.jpg xxx.mp4 a.out。FILE * ---》文件流指针----》已打开文件。Linux内核提供的一套对文件操作的操作方法------->系统调用。"r+" 以读写的方式打开。C标准库提供的一套对文件操作的操作方法------->库函数。c 字符设备文件 ------->如输入输出设备(鼠标键盘显示器...)I : input O: output ----->文件。

2025-08-11 15:14:10 1101

原创 数据结构二叉树与gdb应用

树是n(n≥0)个结点的有限集合。当n=0时称为空树;非空树满足:有且仅有一个特定的称为根(Root)的结点其余结点可分为m(m≥0)个互不相交的有限集合,每个集合本身又是一棵树,称为根的子树(SubTree)

2025-08-09 14:42:34 752

原创 数据结构——哈希函数

哈希存储:将要存储的数据的关键字和存储位置之间,建立起对应的关系,这个关系称之为哈希函数。存储数据时,通过对应的哈希函数可以将数据映射到指定的存储位置;根据上述哈希函数,建立一个哈希表,存放78 ,98应该存储在88之后,但88后只有一个空间存储数据,则78存入,而98则通过探测序列,动态查找下一个空闲位置,即21之后。解决哈希冲突在此解释两个方法,根据该哈希函数插入10,21,23,45,76,88。构造哈希表,在哈希表中的每一个槽位存入每个链表的头节点地址,以链表形式进行数据存储。

2025-08-07 18:37:56 732

原创 数组与结构——栈和队列

二级指针:1. 在被调函数中,想要修改主调函数中的指针变量,需要传递该指针变量的地址,形参用二级指针接收。2.指针数组的数组名是一个二级指针,指针数组的数组名作为参数传递时,可用二级指针接收。指针数组:保存多个指针的数组。数组名:数组首元素地址。

2025-08-06 21:35:52 721

原创 vi编辑器makefile的使用以及双向链表

时间戳:在编译代码时,只编译修改后的源文件,其他没有修改的,只进行链接即可。名称:Makefile、makefile(只有两种形式,首字母大写或小写)Makefile :用来管理代码的编译和链接。②在编写文件(.c)中编写创建双向链表函数。(3)遍历双向链表(正向遍历,逆向遍历)(注:$(OBJ) : $(SRC))依赖文件:main.c fun.c。链接:处理多文件及函数的链接关系。-L:指定使用到的库所在的位置。汇编:将汇编指令生成二进制指令。预处理:处理和#相关的指令。①在头文件(.h)中声明。

2025-08-05 20:36:02 703

原创 数据结构——单向链表

散列结构(哈希结构):将数据的存储位置与数据元素之间的关键字建立起对应的关系(哈希函数),根据该关系进行数据的存储和查找。接下里将从创建链表对象,插入数据,删除数据,查找数据,修改数据,销毁数据介绍单向链表。线性结构:数据元素与元素之间存在一对一的关系(如:顺序表,链表,队列、栈)链表:对象(存储数据的对象) ——> 属性(变量)、行为(函数)图形结构:数据元素与元素之间存在多对多的关系(如:网状结构)树形结构:数据元素与元素之间存在一对多的关系(如:二叉树)集合:数据元素与数据元素之间平等的集合关系。

2025-08-04 22:09:49 457

原创 C语言 —— 指针(4)

申请的空间是连续的,成功时返回指向内存分配的指针(类型为void * 型,通常需要进行强制类型转换),失败时返回空指针(NULL)。需手动管理内存,所分配的内存不会自动释放,必须调用free()避免内存泄漏。指针数组是指一个数组,其元素都是指针,简单地说,数组中的每一个元素存储都是一个内存地址,而不是直接存储数据。eg:如原来申请内存只能容纳长度为10的一维整型数组,现在改为可容纳长度为20的一维整形数组。它存储的是函数的地址,而不是数据变量的地址。返回值指向新的内存,与原来的p指向的内存可能不同。

2025-07-30 20:57:39 846

原创 C语言 —— 指针和字符型数组

在介绍字符型数组与指针的关系前,先回忆一下字符型数组:字符数组是C语言中存储字符串的基本方式,它的特点如下:在内存中连续存储;以'\0'作为字符串结束标志;数组名代表数组首地址。

2025-07-29 20:21:55 883

原创 C语言——指针与一维数组

其目标是将数组分为两部分,左边部分小于基准数t,右边部分大于基准数t。(大都选择数组第一个元素为基准数t)其结果依旧是一个指针,新的指针是在原来的地址基础上加n * (sizeof(基类型))个字节。两指针相见必须保持类型一致,其差的结果为相差基类型的个数。*(a + 1)表示第一个元素的值,*(a + 1)等价于a[1] ,值为2;p 代表数组首元素的地址,即*p表示数组首元素的值,所以为1;++p表达式加了,p的值也加了1,所以*++p的值为3;p++表达式没加,所以*p++也是首元素的值为1;

2025-07-28 20:23:26 401

原创 C语言——预处理命令及指针(1)

宏命令一律大写,宏命令后不加分号,只换不算。一般形式#define 标识符 字符串 (标识符名大写)

2025-07-26 18:21:39 1104

原创 C语言——函数(2)

二维数组传参二维数组传参于一维数组类似,传递的参数是数组名(即首元素的地址,以及数组的行数)

2025-07-25 23:31:22 684

原创 C语言——函数

通过编译器将我们所编写的代码进行编译,函数第一条代码的地址就是函数入口的地址,在汇编层面,函数调用的本质是一系列机器指令的组合,即指令集。这两种递归调用都是无终止的自身调用,显然,程序中不应该出现这种无终止的自身调用,而只应该出现有限次数,有终止的递归调用,所以可以用if语句来控制,只在某一条件成立的情况才会执行递归调用,反之则不再继续。出栈(恢复现场):当pc执行到被调函数的return时,会从“栈”中获取入栈时的位置,然后再根据先进后出的规则一层一层回到主函数时的位置。例如:调用函数交换a,b的值。

2025-07-24 20:42:40 524

原创 C语言——数组(3)及 函数

主函数写在其他函数之后,所以主函数是程序的入口,函数的调用可以提高代码的复用性,降低程序的耦合性,简单的说就是善于用于函数,以减少程序的重复编写。如:a[3][4] = {{1,2,3,4},{5,6,7},{8,9,10,11},我们知道当数组赋值个数少于数组的元素个数,会补零。一个C语言程序可以由一个主函数和若干个其他函数组成,主函数可以调用其他函数,其他函数也可以调用其他函数。在C语言中,函数参数用于传递值,函数的值指返回值 ,表示输出结果,函数调用通过函数名和参数列表实现具体操作。

2025-07-23 20:48:27 751

原创 C语言——数组2

注意:虽然我们只打入了五个字符,占五个字节,但是它实际上占了六个字节,这是因为字符串需要 ‘ \0 ’,结尾,所以上面字符数组的实际存储为。在上一节中,我们提到了一些数组排序算法,那我们需要对数组进行排序呢,有什么目的?它的赋值有多个形式如:char s [100] = { 'H','e','l','l','o'};sizeof:是数组长度,其值为100,当数组未定义长度,其值为7(因为六个字符+一个‘\0’)如一个数组[ begin,end],其中begin,end分别为起始点和结束点。

2025-07-22 19:35:24 883

原创 c语言 ——数组(1)

选择排序的工作方式是:每次从待排序的数据中找出最小(或最大)的元素,放到已排序序列的末尾。数组逆序就是将数组中的元素顺序完全颠倒过来,第一个元素和最后一个元素交换,第二个元素和倒数第二个元素交换,以此类推。冒泡排序:冒泡排序通过不断比较相邻元素并交换它们的位置来排序,较大的元素会像气泡一样逐渐"浮"到数组的顶端。插入排序的思路类似于我们整理扑克牌的方式:将未排序的元素逐个插入到已排序部分的适当位置。最后一个元素的下标值是元素个数减1。3、数组的数组名代表数组首元素的首地址,表达式a代表的取首地址a[0].

2025-07-21 22:06:36 353

原创 C语言——循环控制

需要将循环体用{ }围起来,在代码前对循环体(反复执行的代码称为循环的循环体)进行命名,即标识符。当多个循环嵌套,想使用break语句跳出整个循环,在内层循环终止后用if语句内层循环的值用内层循环表达式2进行判定,若为真,再用if语句使用break语句跳出外循环。表达式为逻辑表达式,进入循环时,对逻辑表达式求值,逻辑为真,则进入循环体,然后在对逻辑求值,反复进行,直至逻辑为假,循环结束。break语句会立即终止当前的循环的控制语句,当多个循环嵌套,在内层循环使用break语句,它只退出它所在的当前循环。

2025-07-20 16:35:54 531

原创 C语言关系运算符及表达式,逻辑运算符及表达式,以及if语句,switch语句

当问题复杂时,if语句是可以实现嵌套的,当涉及多层判定时,如(判断一年中的每个月有多少天,还要对闰年,平年的2月在进行判断)if语句是条件判断语句,else会主动去找最近的if语句,它与if成对出现,不会单独出现。逻辑与(&&):两边为真,逻辑量为“真”,逻辑运算结果为1,两个中有一个为假,C的逻辑运算结果为0,逻辑非(||) :一个为真,逻辑运算结果为“真”(1),两边为假,逻辑量为“假”(0)在关系表达式中,杜绝连续比较,需要连续比较时,则需要逻辑运算符。逻辑表达式的值是一个逻辑量“真”或“假”

2025-07-18 21:56:23 494

原创 C语言数据输入输出函数

越界访问:当格式字符串不匹配时,比如short形为2/字节,int形为4字节,当int相传人short形时会产生越界访问,导致编译错误,还有数值范围,short形的范围 -32768~32767,当输入一个更大的数也会产生越界访问,所以在编译时需要注意字节数是否匹配,数值是否在数据类型的范围之内。② o , u , x , X:用于输出无符号的八进制(o),输出无符号的十进制(u),用于输出无符号的十六进制(x,X)的整数。在C的函数库中,有多个“标准的输入输出函数”,本文介绍四个常用的输入输出函数。

2025-07-17 20:55:32 581

原创 C语言基础——字符型及运算符,赋值

+ i 与 i + +区别不大,+ + i 是在使用 i 之前对 i 增加 1 ,i + + 是在使用 i 之后对 i 增加 1 ,在循环语句等大部分情况下,前+ +的效率高于后+ +,这是因为前 + +是在变量 i 原有的地址进行递增,后 + +是需要重新找内存地址进行递增在返回递增前的值。(注意,箭头的高低只代表数据类型级别的高低,当int型和double型进行混合运算时,int型的数据并不是逐级转换为double型,而是直接从int型转变为double型)并且单引号内的字符是区分大小写的。

2025-07-16 20:24:33 923

原创 C语言的数据类型(整形,字符型,浮点型)

十进制的10的二进制形式为1010(在不同的编译系统中为整形数据分配的字节数是不同的),我们假定该编译系统为其分配了2个字节。(1byte=8bit),其数值是以补码的形式表示的,一个正整数的原码,反码,补码是相同的。C语言规定:标识符只能由字母,数字和 '_' 组成,且数字不能开头,如3a_d就是错误的命名,系统还将大写字母和小写字母认为是两个不同的字符,所以num和NUM是两个不同的变量名。而负数的补码与整数不一样,求负数补码的方法是:将该数的绝对值的二进制形式,按位取反再+1,比如求-10的补码。

2025-07-15 20:12:40 1117 1

空空如也

空空如也

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

TA关注的人

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