自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 网络编程学习总结5

有五个哲学家,他们的生活方式是交替地进行思考和进餐,哲学家们共用一张圆桌,分别坐在周围的五张椅子上,在圆桌上有五个碗和五支筷子,平时哲学家进行思考,饥饿时便试图取其左、右最靠近他的筷子,只有在他拿到两支筷子时才能进餐,该哲学家进餐完毕后,放下左右两只筷子又继续思考。当一个进程或线程已经占用一个不可被剥夺的资源,并且在请求新资源无法被满足时,则释放已经占用的资源,等待一段时间后重新申请。3、右击此电脑->属性->高级系统设置->高级->环境变量->Path->编辑->新建->粘贴路径->确定。

2022-10-13 18:39:50 93 1

原创 网络编程学习总结4

注意:从表面上看当主线程结束后,子线程会跟着一起结束,就会误以为主线程的结束影响了子线程的结束,但是实际上子线程之所以结束是因为主线程执行了main函数中隐藏的return语句,导致了整个进程结束,所以进程中所有的线程才会随之结束。1、线程是进程的执行路线,它是进程内部的控制序列,或者说线程是进程的一部分(进程是一个资源单位,线程是执行单位,线程是进程的一部分,负责真正的执行)9、线程的系统开销很小、任务切换快、多个线程之间不需要数据交换、因此不需要类似于XSI的通信机制,因此使用线程简单而高效。

2022-10-12 11:24:25 87

原创 网络编程学习总结3

/ 被监控的文件描述符。2,调用结束后如果想知道具体是哪个文件描述符发生了相关的操作,必须对所有被监控的文件描述符。优点:不需要频繁的创建,销毁进程从而节约了内存资源,时间资源,也避免了进程之间的竞争,等待。需要存储被监控的文件描述符,当由于有文件描述符发生了相应的操作而导致函数返回时,// 产生事件的描述符。// 想要监控的事件。2,会只把发生事件的描述符返回,不需要遍历所有的描述符,大大的节约时间。返回值:监控到发生相关操作的文件描述符的个数,超时返回0,错误返回-1;

2022-09-26 18:31:50 242

原创 网络编程学习总结2

addrlen:地址结构体的字节数,用于区分sockaddr_un还是sockaddr_in。功能:把字符串格式的点分十进制表示的ip地址转换成整数形式的ip地址(大端)返回值:连接成功返回一个新的连接后的socket描述符,连接失败返回-1。准备通信地址(端口号+ip地址) 准备通信地址(端口号+ip地址)功能:把整数形式的ip地址转换成字符串格式的点分十进制表示的ip地址。绑定 ...1,即告诉src_addr函数当前计算机地址结构体的字节数。

2022-09-22 19:59:27 213

原创 网络编程学习总结1

实际传递的是 sockaddr_un或者sockaddr_in 结构体指针,需要把它们统一转换。addrlen:地址结构体的字节数,用于区分sockaddr_un还是sockaddr_in。OSI/RM结构七层:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。addrlen:地址结构体的字节数,用于区分sockaddr_un还是sockaddr_in。

2022-09-20 20:45:34 48

原创 Linux环境编程学习总结8

MSG_NOERROR 如果不包含此标志,如果实际发送过来的数据字节数>接收的字节数,

2022-09-19 18:55:52 56

原创 Linux环境编程学习总结7

WCONTINUED 如果有子进程从暂停态转为继续运行,返回该子进程的状态。2、进程接收到某些信息,可以是其它进程发送的,也可能自己的错误导致的。这三种方式结束进程,它的父进程都无法获取结束状态码,因此叫做异常终止。因为进程之间是相互独立的,为了进程间协同工作就必须实现进程间交互数据。2、如果有一个子进程结束,立即返回该进程的结束状态码和ID。管道就是一种特殊的文件,数据在文件中是流动的,读取之后就自动消失,对于子进程的结束而言,都希望父进程能够知道并作出一定的反应,

2022-09-18 10:55:40 253

原创 Linux环境编程学习总结6

注意:vfork创建的子进程一定先返回,此时子进程并没有创建成功,需要加载一个可执行文件替换当前子进程当前的所有资源,当替换完成后子进程才算创建成功,此刻父进程才返回。孤儿进程:父进程先于子进程结束,子进程就变成了孤儿进程,孤儿进程会被孤儿院(init守护进程)领养,init就是孤儿进程的父进程。一个进程可以被另一个进程创建,创建者叫做父进程,被创建者叫子进程,子进程被父进程创建后会在操作系统的调度下同时运行。僵尸进程:该进程已死亡,但是它的父进程没有立即回收它的相关资源,该进程就进入僵尸态。

2022-09-15 21:40:33 35

原创 Linux环境编程学习总结5

/ 不附带其他信息的信号处理函数。ITIMER_REAL 真实计时器 程序总的计时时间SIGALRM(14)ITIMER_VIRTUAL 虚拟计时器 用户态的计时SIGVTALRM(26)void (*sa_restorer)(void);1、SIGKILL(9)、SIGSTOP(19)信号不能被捕获和忽略处理。SIG_BLOCK 把set中的信号添加到要屏蔽的信号集里。SIG_UNBLOCK 从信号屏蔽集中删除set中的信号 解除。

2022-09-09 15:38:26 83

原创 Linux环境编程学习总结4

/ 占用512Bblock块数量。// 最后内容修改时间。// 最后状态修改时间。// 下一条信息的偏移量。// inode节点号。// 文件类型和权限。// 特殊设备ID号。功能:从目录流中读取一条记录信息,该条信息记录了目录中一个文件的信息。

2022-09-08 15:01:32 78

原创 Linux环境编程学习总结3

结论:使用标准IO比直接使用系统IO更快,原因是标准IO有缓冲区机制,在写入数据时并不是立即直接调用系统IO进行写入,而是先把缓冲区写慢后,再调用系统调用写入到文件中。每个打开的文件都有一个记录读写位置的指针,叫做文件位置指针,所有对文件的读写操作都是从该指针的位置进行的,该指针会随着文件的读写自动往后移动。4、内核中有一张打开文件的表格,文件描述符是访问这张表的下标,因此也称为"句柄",相当于访问已打开文件的凭证。注意:其中一个文件描述符关闭,不影响复制出来的文件描述符,但是他们共享同一个文件位置指针。

2022-09-05 18:53:47 73

原创 Linux环境编程学习总结2

注意:sbrk/brk 属于POSIX标准中的内存映射函数,都可以单独映射、取消映射,但是配合使用最方便(sbrk映射、brk取消映射)4、每个进程都有4G的虚拟地址空间,虚拟地址只是虚假的地址编号,并不是真实物理内存地址编号,虚拟地址必须与物理内存进行映射后才能使用。1、sbrk/brk底层维护了一个指针,该指针记录这映射内存的结尾,移动该指针就会映射、取消映射,映射的内存属于堆内存。2、mmap/munmap 底层不维护任何东西,如果mmap映射成功返回映射后的内存首地址,映射的内存属于堆内存。

2022-09-02 09:04:00 74

原创 Linux环境编程学习总结1

Minix操作系统是一种基于微内核架构的类UNIX计算机操作系统,并开放全部源代码给大学教学和研究工作,Linux之父林纳斯正是收到Minix的启发,才开发了第一个版本的Linux内核。相当于带入口的可执行文件,当运行程序时,会把共享库一起加载到内存中,调用共享库函数,函数名就是记录了它在共享库中的位置,本质上是跳转到共享库中对应的位置执行。每个程序执行时操作系统都会分配一张环境变量表,该表中记录了操作系统所有的环境变量,这些环境变量反映了操作系统的配置情况,以及程序所处于的操作系统环境情况。...

2022-08-31 20:36:35 100

原创 数据结构与算法学习总结12

该排序算法理论上速度非常快,它不是基于比较的算法,在一定范围内整数排序时快于任意的一种比较排序算法,但是有很大的局限性:适合排序整形数据,而且数据的范围差别不宜过大,否则会非常浪费内存反而慢于比较的排序,如果数据越平均、重复数越多,性价比越高。根据数据的值存储到不同的桶中,然后再调用其它的排序算法,度桶中的数据进行排序,然后再从桶中依次拷贝回数组中,从而降低排序的规模以此提高排序的速度,是一种典型的以空间换时间的算法。对待查找的数据没有要求,从头到尾逐一比较,在小规模的查找中较为常见,查找效率较低。...

2022-08-30 14:37:18 61

原创 数据结构与算法学习总结11

是一种数据处理的思想,不是一种特定的算法,当数据量非常多时,可以先把数据进行分块处理,然后再根据分块的条件进行查找,例如英文字典。待查找的数据必须有序,从数据中间位置开始比较查找,如果中间值比key小,则从左边继续进行二分查找,反之从右边进行。注意:对于一个算法而言,其时间复杂度与空间复杂度往往是相互影响的,没有唯一的标准,需要结合实际综合考虑。分而治之,把一个大而复杂的问题,分解成很多小而简单的问题,利用计算机强大的计算能力来解决问题。用一个一维数组存储n个顶点,用一个n*n的二维数组存储边。...

2022-08-29 10:02:08 47

原创 数据结构与算法学习总结10

度:依附于顶点的边的数量称之为该顶点的度,有向图中,度分为出度(从该顶点出发的弧的数量)、入度(指向该顶点的弧的数量)生成树:顶点数为n,仅需要n-1条边的连通图,称之为生成树,如果给边配上权重,权重和最小的生成树称之为最小生成树。通常表示: G(V,E) G表示一个图,V是图中顶点集合(元素),E是图中所有边(元素之间的关系)的集合。注意:不讨论顶点到自身的边,且不讨论重复的边,这种图统称为简单图,数据结构中只研究简单图。边的权重:图中的边附带有意义的数据,这些数据叫做边的权重,带权重的图也称为网。..

2022-08-27 14:17:21 51

原创 数据结构与算法学习总结9

2、从F中选取权值最小的两个节点作为左右子树构建成一棵新的二叉树,且新的根节点的权为左右子树的权值之和。也是一种自平衡的树,它不是根据子树的高度差来调整平衡的,而是给节点设置一种颜色,来达到平衡。前提是有序的二叉树,它的左右子树的高度差不超过1,而且它的所有子树也满足这个条件。5、从一个节点到该节点的子孙节点的所有路径上包含了相同数量的黑色节点。节点的权:若将树中节点赋予一个有某种意义的数值,该数值称为该节点的权。节点的带权路径长度:从根节点到该节点的路径长度与该节点的权的乘积。......

2022-08-26 16:50:01 59

原创 数据结构与算法学习总结8

是一种完全二叉树,待比较的数据都存储在最后一层,根节点是根据左右子树其中一个生成,因此根节点是最大或者最小的,选择树的功能是快速地找出最大值或最小值。有序链式二叉树中有很多的空指针,可以让这些指针指向下一个、前一个节点,这样在遍历时可以不用递归而可以使用循环遍历,可以提高树的遍历速度。右子树指针标志位 (假表示指向真的右子树,真表示右子树指向下一个节点)规律:在n个节点的链式二叉树中必定有n+1个空指针域。大顶堆(大根堆):根节点比左右子树大。是一种完全二叉树,不适合链式存储。选择树:(胜者树、败者树)..

2022-08-25 19:02:49 366

原创 数据结构与算法学习总结7

完全二叉树:深度为k,有n个节点的二叉树当且仅当其每一个节点都与深度为k的满二叉树中编号从1到n的节点一一对应时,称为完全二叉树。左子树的数据小于根,右子树的数据大于等于根,这种树称为有序二叉树、二叉搜索树、二叉排序树。性质3:若在任意一棵二叉树中,有n0个叶子节点,有n2个度为2的节点,则必有n0=n2+1。双亲和孩子(父节点、子节点):节点的子树被称为孩子节点,该节点就是它们的双亲。若2i+1≤n,则有编号为2i+1的右节点,否则没有右节点。若2i≤n,则有编号为2i的左节点,否则没有左节点。

2022-08-24 17:44:48 52

原创 数据结构与算法学习总结6

注意:局部变量可以和全局变量同名,在函数内局部变量会屏蔽同名的全局变量,块变量在语句块内会屏蔽同名的全局、局部变量,因此建议全局变量首字母大写。如果变量的值没有被显示修改,那么在使用该变量时不会从内存中读取,而是继续使用上次读取的结果,这个过程叫做取值优化,一般变量都会进行。但是如果修饰的是初始化过的全局变量、初始化过的静态局部变量,则该变量会从data改为text,变成了"常量",不能强制修改。5、数组作为函数参数传递时,传递是数组的首地址,叫做"址传递",函数和函数的调用者可以共享同一个数组。

2022-08-23 11:14:57 66

原创 数据结构与算法学习总结5

/ 重定义啦函数指针类型 新类型名叫Comper。// 定义函数指针变量 Cmoper cmp。// 遍历 show是回调函数由调用者提供。4、双向循环链表 prev next。运算:常规功能+回调函数。// 在两个结点之间插入一个结点。// 创建链表 带头结点。// cmp即函数指针变量。5、Linux内核链表。// 根据位置访问结点。// 通用链表结点。// 通用链表结构。// 按位置删除。// 按位置删除。// 创建结点。...

2022-08-18 18:15:22 227

原创 数据结构与算法学习总结4

链表的最后一个结点的next不再指向NULL,而是指向头结点这种链表称为单向。3,已知结点位置,可以选择从前往后或者从后往前遍历,提高链表访问效率。牺牲了随机访问的功能,也没达到链表动态申请内存的效果,只是给没有指针。这种链表在插入删除时只需要修改游标的值,而不用申请,释放结点内存。循环链表,简称循环链表,它好处是可以通过任意结点来遍历整个链表。静态链表的结点存储在连续的内存中,通过游标来访问下一个结点。链表的结点不能包含万物,那么就让万物来包含结点。的编程语言实现链表的一种方式,适用范围不大。...

2022-08-16 15:57:39 76

原创 数据结构与算法学习总结3

顺序结构:数据存储在连续的内存中,可以使用数据的相对位置来表示数据之间的关系。链式结构:数据分散的存储在内存的任何位置,通过数据项中有一项指针域用来表示。top初值:0 入栈 top++ 空增栈。top初值:cal 入栈top-- 满减栈。队列: 有两个端口,一个只能入队,一个只能出队,先进先出。创建,销毁,清空,添加,删除,查询,访问,修改,排序,遍历。注意: 栈,队列的功能受限,只能操作栈顶或队头队尾,集合:除了通属于一个集合,数据之间没有任何关系。栈2不空,栈1不能到栈2。.....

2022-08-12 13:54:44 78

原创 数据结构与算法学习总结2

由一维数组+队头下标front+队尾下标tail组成,入队tail++,出队front++,为了让队列能够反复使用,我们把队列想象成一个环,因此当front和tail加1后都需要用队列容量求余再重新赋值。缺点:添加、删除结点时,可能修改指向第一个结点的指针,参数需要使用二级指针,创建、销毁、入队、出队、队空、队满、查队头、查队尾、数量。创建、销毁、入栈、出栈、栈顶、栈满、栈空。创建、销毁、入队、出队、队空、查队头、查队尾。创建、销毁、入栈、出栈、栈空、栈顶。有两个端口,一个端口只能入队,另一个只能出队。..

2022-08-11 20:10:18 226

原创 数据结构与算法学习总结1

数据元素存储在彼此相互独立的内存中,每个独立的元素也叫做结点,每个结点中增加一项数据项用于存储其它相关结点的地址,以此表示结点之间的关系。缺点:添加、删除结点时,可能修改指向第一个结点的指针,参数需要使用二级指针,才能更改指针的指向,比较麻烦。第一个结点的数据域不存储有效元素,仅仅只是使用它的指针域永远指向链表的第一个数据有效的结点。创建、销毁、清空、插入、删除、访问、查询、修改、排序、遍历。创建,销毁,入队,出队,队空,队满,查队头,查队尾,数量。优点:插入、删除更方便、空间利用率极高、对内存要求不高。.

2022-08-10 19:58:00 101

原创 标准C语言学习总结14

struct 结构类型名 结构变量名={.成员名=v1,.成员名=v2,...};为无意义的值取一个有意义的名字,提高代码的可读性,提高安全性(比变量更安全)如果不给成员值,那么枚举中的值第一个默认从0开始,逐渐+1,如果设置了某个值。来记录着接下来要读写的位置以r,r+,w,w+打开文件,位置指针在文件的开头。内存补齐:结构体总字节数必须是它最大成员字节数的整数倍,联合与结构使用方法基本一致,与结构的区别是联合的所有成员共用一块内存,联合的效果就是使用少量的内存对应多个标识符,以此达到节约内存的目的,..

2022-08-08 19:41:06 190

原创 标准C语言学习总结13

struct 结构类型名 结构变量名 = {.成员名2=v2,.成员名1=v1,...}二义性:由于宏函数所处位置,参数的不同,导致同一个宏函数有多重解释结果,未知类型名"xxxx",确认自己没写错名字,也导入对应的头文件,不是真正函数,只是带参数的宏,使用宏函数,先替换成宏函数后面的代码,在Linux系统下计算结构体的对齐补齐时,如果成员的字节数超过4,练习1:设计一个教师结构体类型,类型中要有成员:姓名:,性别,工号,工龄。2,其他文件想要使用.c中的内容,只需要把它的.h导入即可。...

2022-08-06 14:22:07 556

原创 标准C语言学习总结12

在终端执行 make 命令,就会自动执行Makefile脚本文件中的编译指令,2. 如果这个工程的某几个 c 文件被修改,那么我们只编译被修改的 c 文件,1. 如果这个工程没有编译过,那么我们的所有 c 文件都要编译并被链接。3. 如果这个工程的头文件被改变了,那么我们需要编译引用了这几个头文件的。Makefile是由一系列编译指令组成的可执行文本文件,也叫做编译脚本。它可以根据文件的最后修改时间来判断哪些文件需要重新编译,c 文件,并链接目标程序。被依赖的目标1:依赖文件。被依赖的目标2:依赖文件。..

2022-08-04 08:48:01 95

原创 标准C语言学习总结11

优点:提高代码可扩展性,提高了可读性,提高了安全性,还可以用在case后面。局部变量,函数名全部小写,全局变量首字母大写,数组arr,指针p。1,先把代码中使用到宏函数的地方替换为宏函数后面的代码 a+b。//p1,p2,p3都是int*程序员所编写的代码不是真正的标准C代码,需要一段程序翻译成标准C代码,宏函数:带参数的宏替换,只是代码替换,只是使用时像函数而已,1,为每个.c文件编写一份.h文件,.h文件对.c文件的说明。2,如果需要用到某个.c文件中的全局变量,函数,宏等内容时,...

2022-08-03 11:35:03 33

原创 标准C语言学习总结10

返回值needle在haystack中首次出现的位置,如果找不到则返回NULL。功能比较两块内存的值,按照字节比较,一旦比较出结果后面不再比较。功能在haystack中查找是否存在子串needle。功能从src位置拷贝n个字节到dest的位置。功能把各种类型的数据输出给字符串str。功能字符串转longlong类型。功能从str中解析读取数据到变量中。s1......

2022-07-28 08:54:15 28

原创 C语言实现通讯录系统

printf("%s%s%s\n",name[i],'w'==sex[i]?printf("%s%s%s\n",name[i],'w'==sex[i]?puts("------1,添加联系人------");puts("------2,删除联系人------");puts("------3,修改联系人------");puts("------4,查找联系人------");puts("------5,遍历联系人------");puts("------6,退出通讯录------");......

2022-07-26 18:39:21 226

原创 标准C语言学习总结9

1,先判断'\n'在不在字符串内,如果不在,则说明在缓冲区内,需要清理缓冲区。从缓冲区中读任意数据并丢弃,如果不是'\n',继续读取,直到遇到'\n',1,当想要读取整型或浮点型数据,但是缓冲区中的数据是符号或字母时,读取会失败。从头开始,每个字符一对一进行比较,按照字典序,谁出现前面谁小,Linux中才能使用。程序并不是立即从键盘获取输入的内容,而是当按下回车后,终端输入的内容。会先存储到输入缓冲区中,然后输入函数在从输入缓冲区中读取数据到内存中。把输入缓冲区中的当前位置指针,移动到缓冲区的末尾,...

2022-07-25 18:25:54 162

原创 标准C语言学习总结8

1,当首次向malloc申请内存,malloc会向操作系统申请内存,操作系统会直接分配33页。2,每个内存块之间会有空隙(4~12字节),一部分空隙是为了内存对齐,其中一定有4字节。已经释放了但无法继续使用的内存叫做内存碎片,由于申请和释放的时间不协调导致的。3,封装malloc,free,记录申请,释放的信息到日志文件中。内存无法再使用,也无法被释放,而需要再次使用时只能重新申请内存,功能从堆内存中申请size个字节的内存申请到的内存中数据的值不确定。...

2022-07-23 11:01:06 114

原创 标准C语言学习总结7

指针-指针(指针-指针)/指针类型宽度计算两个指针直接间隔了多少个指针元素。由指针变量组成的数组称之为指针数组,它的成员都是类型相同的指针变量。当指针变量指向数组首地址时,指针可以当做数组名使用,数组名也可以当做指针使用。函数指针就是指向函数的指针,它里面存储的是函数在代码段中所处的入口位置地址。1,当函数的参数是指针,别人传给你的指针可能是空指针。2,从函数获取的返回值是指针类型时,可能会返回空指针。指针变量中存储的是整数,理论上整数可以使用的运算符它都可以使用,...

2022-07-22 20:45:24 40

原创 标准C语言学习总结6

2,指针的类型表示存储的是什么类型变量的地址,它决定了通过这个指针变量。1,指针变量与普通变量的用法有很大的区别,建议取名以p结尾以示区分。4,指针变量与普通变量一样默认值是随机的,一般初始化为NULL。指针是一特殊种数据类型,使用它可以定义指针变量,指针变量存储的是整型数据。2,由于函数之间传参是单向的值传递(内存拷贝),对于字节数较多的变量。该过程可能会产生段错误,原因是里面存储的内存编号是非法的。虽然函数之间命名空间是独立的,但是地址空间是同一个,1,函数之间是相互独立的,但是有时候需要共享变量,..

2022-07-22 20:44:09 73

原创 C语言实现推箱子

人前方-3+1。人原位置-1。人前方的前方+3。箱子的前方是路\目标点。3.定义记录角色位置的变量xy。2.定义8*8整数地图并初始化。1.确定数值与字符的对应关系。前方是路,参考走迷宫。4.定义记录步数的变量。1.清理屏幕,显示地图。2.获取方向键并处理。3.判断是否游戏胜利。逻辑分析进入死循环。......

2022-07-20 19:30:13 576

原创 C语言实现走迷宫

过了%lu秒\n",time(NULL)-start_time);3.时间time(NULL)获取1970-1-1到运行时过了总秒数。switch(getch())//获取方向键。i++)//显示地图。system("clear");1.把旧位置变成''2.把新位置变成'@'case183//上。case184//下。case185//右。case186//左。2.定义变量记录角色的位置xy。//判断是否到达出口。......

2022-07-20 19:28:07 1934

原创 C语言实现五子棋

role='O'==role?printf("------------请%c落子------------",role);坐标要合法,该位置不能有棋子否则继续重新落子。3,定义一个变量记录棋子角色黑棋'@'白棋'$'printf("%c赢了",role);定义需要数据是否需要对数据进行初始化。1,清理屏幕,显示棋盘角色。c_board();1,定义字符数组的棋盘15*15。t_board();2,定义变量用于记录落子的位置。//清理屏幕初始化棋盘。//显示棋盘。......

2022-07-19 15:01:30 627

原创 标准C语言学习总结5

5,数组作为函数参数传递时,传递是数组的首地址,叫做"地址传递"函数和函数的调用者可以共享同一个数组。定义变量时,如果在类型前面加typeodef,那么变量名就变成了这个类型的新的类型名。3,return其实是把数据存放到一个公共区域(函数都可以访问),如果不写return语句,text代码段存储二进制的指令,常量数据,权限只读,在多文件编程中,假设a.c中定义全局变量N,想要在b.c中使用N,auto用于定义自动分配内存,释放内存的变量(局部变量),不加就代表了加。...

2022-07-18 20:57:35 206

原创 标准C语言学习总结4

进制 函数 位运算符

2022-07-18 09:09:51 43

空空如也

空空如也

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

TA关注的人

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