自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 资源 (6)
  • 收藏
  • 关注

原创 隐私

隐私政策center尊重并保护所有使用服务用户的个人隐私权。为了给您提供更准确、更有个性化的服务,center会按照本隐私权政策的规定使用和披露您的个人信息。但center将以高度的勤勉、审慎义务对待这些信息。除本隐私权政策另有规定外,在未征得您事先许可的情况下,center不会将这些信息对外披露或向第三方提供。center会不时更新本隐私权政策。 您在同意center服务使用协议之时,即视为您...

2019-12-04 09:52:32 107

原创 C语言库的类型

库的制作和使用1.什么是库,为什么需要库库是二进制形式的目标模块包a.o \b.o - abc.a -------- 库c.o /使用库很方便对程序进行模块化设计,方便对某些固定功能的重复使用,方便对某些功能进行更新2.库的类型(1)静态库扩展名.a 库中封装的二进制代码,在链接阶段被复制到调用模块中,调用模块运行时不再需要静态库的支持(2)动态库扩展名.so ...

2019-04-03 09:20:00 388

原创 C语言文件IO文件目录检索

目录检索目录的操作和文件稍有区别,它的操作接口是opendir()readdir()closedir()目录操作中,使用目录流(指针)代表一个打开的目录参数:name:要打开目录的路径返回值:成功返回目录流指针,失败返回NULL参数就是opendir的返回值(目录流指针)读取目录函数读取目录的一个子项,效果类似于ls 目录每次调用读出一项,不会重复,读到最后返回...

2019-04-03 09:18:57 589

原创 C语言文件IO文件的非读写操作3

非读写操作(1)lseek函数 ------------ 调整文件指针位置该函数的用法基本和fseek一样,唯一的区别是lseek使用文件描述符代表一个打开的文件 标准IO 文件IO 打开/关闭 fopen()/fclose() open()/close()读 fgetc()/fgets()/fread()/fscanf() read()写 fputc()/fputs(...

2019-04-03 09:17:55 332

原创 C语言文件IO文件的读写操作2

读写操作参数:fd:要读/写的文件描述符buf:读/写的目标地址count:希望读/写的长度(字节)返回值:返回成功读/写的长度(字节),失败返回-1返回0表示读到末尾,什么也没写...

2019-04-03 09:16:10 454

原创 C语言文件IO文件的打开和关闭1

文件IO1.系统调用Linux操作系统分为内核层和应用层,他们之间是相互隔离的,也就是说内核层不能直接访问用户层,用户层也不能直接访问内核层应用层运行用户使用的所有引用程序和服务内核层管理着系统所有的硬件和资源虽然内核层和应用层相互独立,但是应用程序在完成各项操作需要使用内核的提供的功能,所以内核层和应用层之间需要一个沟通的桥梁这个桥梁在Linux称之为系统调用,本质上来说系统...

2019-04-03 09:15:31 597

原创 C语言标准IO文件的非读写操作4

4.非读写操作fseek函数 --------------- 用来调整文件指针位置注:文件指针指的是读写文件时的位置,这个位置是离文件开头的距离,本质上是一个整数参数:stream:要操作的文件流offset:相对于基准的偏移(负数向前偏移,正数向后偏移)whence:基准 SEEK_CUR:当前位置 SEEK_SET:文件头...

2019-04-03 09:14:08 106

原创 C语言标准IO文件的按块进行读写3

按块进行读写fread/fwrite参数:ptr:读/写的目标地址size:读/写单个数据的大小nmemb:希望读/写数据个数stream:读/写的文件流返回值:返回成功读写的个数(4)按格式进行读写fscanf/fprintf这个两个函数和scanf/printf相比,多了一个代表文件的文件流参数...

2019-04-03 09:13:29 153

原创 C语言标准IO文件的按行读写

(2)按行读写fgets/fputs参数:s:存放读取文件内容的首地址size:存放读取文件内容的空间大小stream:要读取的文件流返回值:成功返回s,出错或者读到末尾返回NULL该函数最多读取size-1个字符,会在最后添加’\0’,遇到换行符停止读取,如果空间足够,换行符会被保存到s指向的空间参数:s:要写入的数据的首地址stream:要写入的文件流返回值...

2019-04-03 09:12:27 837

原创 C语言标准IO文件的读写操作2

3.文件的读写操作(1)以字节的方式进行读写fputc/fgetc参数:stream:要读的文件流返回值:返回读到的字符,读到末尾或者发生错误返回EOF参数:c:要写入的字符stream:要写的文件流返回值:成功返回写的字符,失败返回EOF如果要区分读到末尾还是读出错,可以使用以下两个函数来判断feof()/ferror()feof返回真表示文件读到了末尾...

2019-04-03 09:11:44 521

原创 C语言标准IO文件的打开和关闭

二.标准IO1.文件流和缓冲区标准IO是C标准库(C语言提供的可以直接使用的库)提供的一组访问文件的函数标准IO使用文件流(结构体指针FILE *)代表一个打开的文件,需要包含stdio.h头文件stdio.h49 typedef struct _IO_FILE FILE;libio.h273 struct _IO_FILE {274 int _flags; ...

2019-04-03 09:09:53 586

原创 C语言指针用法

一.指针1.指针作为形参指针作为形参和数组作为形参完全等价指针变量和数组名的异同指针变量和数组名在很多地方是类似的,都代表的是一个地址,作为形参完全等价差别:指针变量可以赋值但是数组名不行对指针变量进行sizeof运算得到的是指针变量的大小(4字节),对数组名进行sizeof运算得到的是整个数组的大小对指针变量进行取地址运算(&)得到的是指针变量在内存中的地址,对数组名...

2019-04-02 10:44:37 529

原创 C语言宏定义

3.宏定义#define 预处理指令可以用来定义宏宏名我们一般都大写(1)宏可以用来给数字起名字,名字写前面,数字写后面,中间用空格分开,名字中间不允许有空格语法:#define 宏名 数字在代码中使用的宏在预处理阶段被替换为他代表的内容在某些时候宏定义和const常量有相似之处可以使用宏代表一个再编写程序时还不知道的数字或者以后有可能变化的参数注:可以定义一个宏不代表任何数字...

2019-04-02 10:43:24 85

原创 C语言预处理指令

预处理指令1.程序的编译过程编译器将C语言源代码变异成可执行程序是通过以下几个步骤完成的(1)预处理处理代码中的预处理指令(以#开头的代码)gcc -E xxx.c -o xxx.i(2)编译将源代码编译成汇编指令gcc -S xxx.i(3)汇编将汇编指令变异成目标文件gcc -c xxx.s(4)链接将目标文件(可能有多个)连接成可执行文件gcc xx...

2019-04-02 10:42:05 95

原创 C语言字符串

一.字符串3.字符串相关库函数C语言提供了多个标准函数来对字符串进行各种基本处理使用这些标准函数需要包含string.h头文件strlen 该函数用来计算字符串中有效字符个数(不包含’\0’)strcpy 该函数可以把一个给定字符串中的所有字符依次拷贝到一个字符数组中strncpy 该函数可以把一个给定字符串中的前n个字符依次拷贝到一个字符数组中...

2019-04-02 10:41:15 1131

原创 C语言的库函数介绍

三.库函数介绍1.atoi函数该函数的作用是将一个字符串中的整数转换成整数类型从第一个字符开始转换,到非数字字符为止atof函数和atoi函数类似,将字符串中的小数转换成double类型使用以上函数需要包含stdlib.h头文件2.sqrt函数该函数用于计算一个浮点数的开平方的值使用该函数需要包含math.h头文件3.sleep函数该函数能让程序睡眠指定的秒数4.输出缓冲区中...

2019-04-02 10:40:28 149

原创 C语言的动态内存分配

二.动态内存分配(1)概念之前所有的内存都是由系统管理,如果希望更加灵活得管理使用的内存,可以使用动态分配的内存动态分配的内存由程序员自己管理,自己申请,自己释放如果没有释放申请的内存就会造成内存泄漏动态申请的内存在内存中的段落是在堆区(2)使用使用动态内存需要一组标准函数,为了使用这些标准函数需要包含stdlib.h头文件malloc函数可以动态分配连续多个字节的内存空间参数是...

2019-04-02 10:38:21 102

原创 C语言的枚举联合(共用)类型

2.枚举枚举也可以自定义数据类型声明枚举类型使用enum关键字,使用枚举类型可以增加程序的可读性枚举类型中规定一组固定的名称,可以在程序中把这些名字当做数字使用计算机为枚举第一个名字分配数字0,以后一次递增也可以在声明枚举类型指定某个名字配对的整数,该名字后面的所有名称所配对的整数都会发生变化enum 枚举类型名{名字1,名字2,名字3.....};enum 枚举类型名 枚举变...

2019-04-02 10:37:22 320

原创 C语言结构体的应用

1.结构体(1)结构体声明结构体可以用来给C语言增加新的数据类型,新的数据类型有多个基本类型组成的结构体本身是一种数据类型,声明一个结构体不占用内存使用结构体之前必须先声明,声明结构体使用struct关键字声明语法:struct 结构体类型名{结构体成员类型 成员变量名;.......};结构体声明语法中的成员变量不可以初始化,因为结构体声明不分配内存可以在声明结构体是同...

2019-04-02 10:36:08 1471

原创 C++的基础语法

堆空间分配C语言中 malloc realloc , 分配堆空间, free释放堆空间c++语音中 用new分配堆空间, 用delete释放堆空间(类)char* p = malloc(100) ; 分配100个字节堆空间 free§;int q = malloc(1004); 分配100个整形数空间 free(q);char* p = new char(‘A’) ; 申...

2019-04-02 10:20:46 122

原创 c语言下的队列

一.队列1.概念队列也是一种线性数据结构采用先进先出的方式管理数据,放入数据和取出数据在两个不同的端点进行,实现需要记录两个端点各自的位置放入数据的一段称之为队尾,取出数据的一端称之为队头往队列放入数据的操作叫做入队,往队列中取出数据的操作叫出队入队修改的是队尾,出队修改对头队列可以使用顺序结构来实现,叫顺序队列也可以使用链式结构来实现,叫链式队列2.环形队列顺序队列在使用时由...

2019-04-02 10:16:25 87

原创 c语言单链表

5.单链表单链表是一种链式的线性结构链式结构中每个存储数据的结构称之为节点单链表来说任何节点只能沿着一个方向访问到下一个节点相邻的节点之间用指针连接(指针保存在节点结构中,指针指向下一个节点)单链表最后一个节点的指针域必须指向NULL可以使用头指针或者无效头结点代表一个单链表其中头指针直接指向单链表中第一个节点,无效头结点的数据域不使用,指针域指向单链表第一个节点我们可以使用头结点...

2019-04-01 13:46:37 749

原创 c语言下的双向循环链表

二.双向循环链表1.概念双向循环链表的节点包含一个数据域,两个指针域,一个指针域指向上一个节点,另一个指针域指向下一个节点这样双向循环链表构成了两个相反方向遍历的圆环双向循环链表与单链表相比,提高了访问的效率,也付出了多维护一个指针的代价双向循环链表的插入和删除操作比单向链表复杂,查找和修改和单向链表的算法一样2.排序对于链表的排序一般使用插入法排序(1)取出一个元素,自然有序...

2019-04-01 13:45:21 516

原创 C语言下的内核链表

二.内核链表内核链表是一种链表,Linux内核中的链表都是用这种形式实现的1.特性内核链表是一种双向循环链表,内核链表的节点节点结构中只有指针域使用内核链表的时候,将内核链表作为一个成员放入到一个结构体中使用我们在链表中找到内核链表结构的地址,通过这个地址就可以找到外部大结构体的地址,通过大结构体就可以访问其中的成员优势:内核链表突破了保存数据的限制,可以用内核链表来保存任何数据(使...

2019-04-01 13:44:02 312

原创 虚函数---类的成员函数

虚函数—类的成员函数说明:在成员函数前面添加virtual关键字 ----那么这个函数就成员了虚函数如果一个类中存在虚函数,那么这个类的对象中包含一个虚表(虚表首地址)虚表在对象空间的开始位置class Data{public:Data(){}~Data(){}virtual void show(){}//虚函数virtual void info(){}protected...

2019-03-27 17:48:12 1915

原创 QT基础语法

构造函数1.构造函数重载 (参数列表)Person(){}Person(string name, int age){this->name = name;this->age = age;}作用:可有多重方式创建对象2.构造函数参数 (默认参数, 参数列表初始化)Person(string name=“zs”, int age=20){this->name =...

2019-03-27 17:46:15 835

原创 QT 基础语法

函数:定义数据类型 函数名(参数列表){函数体}函数调用, 函数递归, 函数参数,函数返回值(类型指针和值), 函数指针, 变参函数函数重载(函数名相同,函数参数列表不同) —编译器检查函数的时候同时检查函数名和参数列表—强类型(指针,引用赋值类型必须一致) add(int , int) add(double, double)Int a =10;Char* p = (char*)...

2019-03-27 17:44:22 3845

原创 QT环境搭建

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Ma...

2019-03-27 17:41:15 81

LINUX 下的超声波驱动

6818开发板Linux系统下的超声波驱动6818开发板Linux系统下的超声波驱动

2019-03-29

LINUX 下的内核链表

LINUX 下的内核链表,简单的应用了以下,Linux下的内核链表函数

2019-04-01

ARM9 Linux系统下的五子棋游戏

ARM9 Linux系统下的五子棋游戏,ARM9 Linux系统下的五子棋游戏,

2019-03-27

C语言的双链表

二.内核链表 内核链表是一种链表,Linux内核中的链表都是用这种形式实现的 1.特性 内核链表是一种双向循环链表,内核链表的节点节点结构中只有指针域 使用内核链表的时候,将内核链表作为一个成员放入到一个结构体中使用 我们在链表中找到内核链表结构的地址,通过这个地址就可以找到外部大结构体的地址,通过大结构体就可以访问其中的成员 优势: 内核链表突破了保存数据的限制,可以用内核链表来保存任何数据(使用一种链表表示各种类型的数据,通用性很强) 内核链表中只有指针域,维护起来更加方便,效率更高 2.使用 内核链表在内核中已经被实现,我们只需要调用其接口直接使用即可 内核链表的实现代码在内核源代码的list.h文件中 3.源代码分析 (1)节点结构: struct list_head { struct list_head *next, *prev;//前置指针 后置指针 }; (2)初始化 #define INIT_LIST_HEAD(ptr) do { \ (ptr)->next = (ptr); (ptr)->prev = (ptr); \ } while (0) (3)插入 //从头部插入 static inline void list_add(struct list_head *new, struct list_head *head)//传入要插入的节点和要插入的链表 { __list_add(new, head, head->next); } //从尾部插入 static inline void list_add_tail(struct list_head *new, struct list_head *head) { __list_add(new, head->prev, head); } (4)通过节点找到外部结构体的地址 //返回外部结构体的地址,第一个参数是节点地址,第二个参数是外部结构体的类型名,第三个参数是节点在外部结构体中的成员名 #define list_entry(ptr, type, member) ((type *)((char *)(ptr)-(unsigned long)(&((type *)0)->member))) (5)遍历内核链表 //遍历内核链表 #define list_for_each(pos, head) \ for (pos = (head)->next; pos != (head); \ pos = pos->next) //安全遍历内核链表 #define list_for_each_safe(pos, n, head) \ for (pos = (head)->next, n = pos->next; pos != (head); \ pos = n, n = pos->next) C语言的双链表,可以增加。插入,删除,修改,销毁等函数接口。

2019-04-01

C语言的单链表

二.内核链表 内核链表是一种链表,Linux内核中的链表都是用这种形式实现的 1.特性 内核链表是一种双向循环链表,内核链表的节点节点结构中只有指针域 使用内核链表的时候,将内核链表作为一个成员放入到一个结构体中使用 我们在链表中找到内核链表结构的地址,通过这个地址就可以找到外部大结构体的地址,通过大结构体就可以访问其中的成员 优势: 内核链表突破了保存数据的限制,可以用内核链表来保存任何数据(使用一种链表表示各种类型的数据,通用性很强) 内核链表中只有指针域,维护起来更加方便,效率更高 2.使用 内核链表在内核中已经被实现,我们只需要调用其接口直接使用即可 内核链表的实现代码在内核源代码的list.h文件中 3.源代码分析 (1)节点结构: struct list_head { struct list_head *next, *prev;//前置指针 后置指针 }; (2)初始化 #define INIT_LIST_HEAD(ptr) do { \ (ptr)->next = (ptr); (ptr)->prev = (ptr); \ } while (0) (3)插入 //从头部插入 static inline void list_add(struct list_head *new, struct list_head *head)//传入要插入的节点和要插入的链表 { __list_add(new, head, head->next); } //从尾部插入 static inline void list_add_tail(struct list_head *new, struct list_head *head) { __list_add(new, head->prev, head); } (4)通过节点找到外部结构体的地址 //返回外部结构体的地址,第一个参数是节点地址,第二个参数是外部结构体的类型名,第三个参数是节点在外部结构体中的成员名 #define list_entry(ptr, type, member) ((type *)((char *)(ptr)-(unsigned long)(&((type *)0)->member))) (5)遍历内核链表 //遍历内核链表 #define list_for_each(pos, head) \ for (pos = (head)->next; pos != (head); \ pos = pos->next) //安全遍历内核链表 #define list_for_each_safe(pos, n, head) \ for (pos = (head)->next, n = pos->next; pos != (head); \ pos = n, n = pos->next) 二.内核链表 内核链表是一种链表,Linux内核中的链表都是用这种形式实现的 1.特性 内核链表是一种双向循环链表,内核链表的节点节点结构中只有指针域 使用内核链表的时候,将内核链表作为一个成员放入到一个结构体中使用 我们在链表中找到内核链表结构的地址,通过这个地址就可以找到外部大结构体的地址,通过大结构体就可以访问其中的成员 优势: 内核链表突破了保存数据的限制,可以用内核链表来保存任何数据(使用一种链表表示各种类型的数据,通用性很强) 内核链表中只有指针域,维护起来更加方便,效率更高 2.使用 内核链表在内核中已经被实现,我们只需要调用其接口直接使用即可 内核链表的实现代码在内核源代码的list.h文件中 3.源代码分析 (1)节点结构: struct list_head { struct list_head *next, *prev;//前置指针 后置指针 }; (2)初始化 #define INIT_LIST_HEAD(ptr) do { \ (ptr)->next = (ptr); (ptr)->prev = (ptr); \ } while (0) (3)插入 //从头部插入 static inline void list_add(struct list_head *new, struct list_head *head)//传入要插入的节点和要插入的链表 { __list_add(new, head, head->next); } //从尾部插入 static inline void list_add_tail(struct list_head *new, struct list_head *head) { __list_add(new, head->prev, head); } (4)通过节点找到外部结构体的地址 //返回外部结构体的地址,第一个参数是节点地址,第二个参数是外部结构体的类型名,第三个参数是节点在外部结构体中的成员名 #define list_entry(ptr, type, member) ((type *)((char *)(ptr)-(unsigned long)(&((type *)0)->member))) (5)遍历内核链表 //遍历内核链表 #define list_for_each(pos, head) \ for (pos = (head)->next; pos != (head); \ pos = pos->next) //安全遍历内核链表 #define list_for_each_safe(pos, n, head) \ for (pos = (head)->next, n = pos->next; pos != (head); \ pos = n, n = pos->next) 二.内核链表 内核链表是一种链表,Linux内核中的链表都是用这种形式实现的 1.特性 内核链表是一种双向循环链表,内核链表的节点节点结构中只有指针域 使用内核链表的时候,将内核链表作为一个成员放入到一个结构体中使用 我们在链表中找到内核链表结构的地址,通过这个地址就可以找到外部大结构体的地址,通过大结构体就可以访问其中的成员 优势: 内核链表突破了保存数据的限制,可以用内核链表来保存任何数据(使用一种链表表示各种类型的数据,通用性很强) 内核链表中只有指针域,维护起来更加方便,效率更高 2.使用 内核链表在内核中已经被实现,我们只需要调用其接口直接使用即可 内核链表的实现代码在内核源代码的list.h文件中 3.源代码分析 (1)节点结构: struct list_head { struct list_head *next, *prev;//前置指针 后置指针 }; (2)初始化 #define INIT_LIST_HEAD(ptr) do { \ (ptr)->next = (ptr); (ptr)->prev = (ptr); \ } while (0) (3)插入 //从头部插入 static inline void list_add(struct list_head *new, struct list_head *head)//传入要插入的节点和要插入的链表 { __list_add(new, head, head->next); } //从尾部插入 static inline void list_add_tail(struct list_head *new, struct list_head *head) { __list_add(new, head->prev, head); } (4)通过节点找到外部结构体的地址 //返回外部结构体的地址,第一个参数是节点地址,第二个参数是外部结构体的类型名,第三个参数是节点在外部结构体中的成员名 #define list_entry(ptr, type, member) ((type *)((char *)(ptr)-(unsigned long)(&((type *)0)->member))) (5)遍历内核链表 //遍历内核链表 #define list_for_each(pos, head) \ for (pos = (head)->next; pos != (head); \ pos = pos->next) //安全遍历内核链表 #define list_for_each_safe(pos, n, head) \ for (pos = (head)->next, n = pos->next; pos != (head); \ pos = n, n = pos->next) C语言下的单链表,可以增加,删除,查找,销毁节点。

2019-04-01

C语言的对列的应用

C语言的对列的应用,写了一些对列的使用的接口函数

2019-04-01

空空如也

空空如也

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

TA关注的人 TA的粉丝

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