- 博客(23)
- 收藏
- 关注
原创 Linux:fork函数
exit实际上也是调用了_exit,exit退出前会冲刷缓冲,关闭流,如果缓冲区中有内容就会显示出来,但_exit不会。通常,父子代码共享,父子不再写入时,数据是共享的,当任意一方试图写入,便以写时拷贝的方式创建一份副本。由输出结果可见,子进程与父进程又不同的pid但是子进程的ppid就是父进程的pid。2、一个进程要执行另一个不同的进程,例如子进程从fork返回后调用exec函数。从已存在进程中创建一个新进程。新进程为子进程,而原进程为父进程。返回值:子进程中返回0,父进程返回子进程id,出错返回-1。
2024-03-24 19:25:49
836
原创 C++:_String类的增删查改
所谓传统写法,就是创建一个大小于s1相同的新空间,+1是因为capacity少了一个'\0'的大小。3. string在底层实际是:basic_string模板类的别名,typedef basic_string<char,char_traits,allocator> string。现代写法就是利用上面写的构造函数,构造一个内容和大小都与s1相同的临时函数tmp,之后交换给s2,而局部对象tmp出了作用域就销毁了。2. 该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作。
2024-03-14 10:23:51
417
原创 C++:构造函数和析构函数
而_t是Time类对象,所以在d销毁时,要将其内部包含的Time类的_t对象销毁,所以要调用Time类的析构函数。但是main函数中不能直接调用Time类的析构函数,实际要释放的是Date类对象,所以编译器会调用Date类的析构函数,而Date没有显式提供,则编译器会给Date类生成一个默认的析构函数,目的是在其内部 调用Time类的析构函数,即当Date对象销毁时,要保证其内部每个自定义对象都可以正确销毁 main函数中并没有直接调用Time类析构函数,而是显式调用编译器为Date类生成的默认析构函数。
2024-02-29 16:01:21
1521
原创 C++:类
class为定义类的关键字,classname为类的名字,{}中为类的主体,定义结束后,括号外要加分号。//类主体类的主体中为类的成员:类中的变量称为类的属性或成员变量;类中的换函数u成为类的方法或者叫做成员函数。类的两种定义方式:1、声明和定义全部放在类中,但成员函数如果再类中定义,编译器可能会将其当成内联函数。char*_sex;int _age;
2024-02-29 14:31:33
527
1
原创 C++:函数重载
与此同时,如果将上述的所有重载类型中的函数都改成同一个名字,就会发现,这些函数都成为了函数重载。所以重载的情况不局限于上述三种的某一种。函数重载是函数的一种特殊情况,C++允许咋同意作用域中声明几个功能内类似的同名函数,这些同名函数的形参个数、形参类型、形参顺序不同。下图中将鼠标放在同名函数上,就会提示有一个重载。两个同名函数中形参的类型不同,就可形成重载。,重载判断的是参数,和函数的返回值无关。
2024-01-21 21:22:59
355
原创 Linux:常用指令
ls [选项][目录或文件:对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息。-a列出目录下的所有文件,包括以开头的隐含文件。-d将目录象文件一样显示,而不是显示其下的文件。如:ls –d指定目录-i输出文件的i节点的索引信息。如ls –ai指定文件-k以k字节的形式表示文件的大小。ls –alk指定文件-l列出文件的详细信息。-n用数字的UID,GID代替名称。(介绍UIDGID-F。
2024-01-18 20:10:46
824
1
原创 C:快速排序
快速排序的的基本思想是任取待排序元素序列中的某个元素作为基准值,按照该排序码将待排序集合分割成两个子序列,左子序列中所有的元素均小于基准值,右子序列中所有的元素均大于基准值,然后左右子序列重复该过程,直到左右的元素都排列在正确的位置上。
2024-01-18 11:08:29
397
1
原创 C:归并排序
归并排序是建立在归并操作上的一种有效方法,该算法是采用分而治之的一个典型例子。分解过程是先将整个个序列二分,之后每个子序列继续二分,直到剩下最后一个数字,之后两两比较。合并过程就是将每个已经有序的小序列进行比较之后,合成大序列再进行比较,最终形成整个有序的序列。,小序列排序结束后是要覆盖回去的,这样在回归的是后才可以实现大序列的排序。归并的实现使用递归的方法。
2024-01-17 23:47:46
357
原创 C:树和二叉树
一个节点含有的子树的个数称为该节点的度;如上图:A的度为6。:度为0的节点称为叶节点;如上图:BCHI...等节点为叶节点。:度不为0的节点;如上图:DEFG...等节点为分支节点。:若一个节点含有子节点,则这个节点称为其子节点的父节点;如上图:A是B的父节点。:一个节点含有的子树的根节点称为该节点的子节点;如上图:B是A的孩子节点。:具有相同父节点的节点互称为兄弟节点;如上图:BC是兄弟节点。:一棵树中,最大的节点的度称为树的度;如上图:树的度为。
2024-01-07 15:18:15
1645
1
原创 C:单项不循环链表的增删查改
链表在物理结构上是不连续的,但是一般以逻辑结构上的连续来帮助理解。因为物理结构是不连续的,所以链表是用指针来进行操作,并且可以单独的释放和增加一个节点。
2023-11-18 23:19:50
38
1
原创 C:文件的打开、读写与关闭
每一个被使用的文件被打开时都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息。scanf函数是格式化的输入函数(键盘)printf函数是格式化的输出函数(屏幕)所以两者是针对标准输入输出流的格式化输入输出函数。而fscanf和fprintf是针对所有输入输出流(文件流,标准输入输出流)的格式化输入输出函数。pf指向的是某个文件的文件信息区(是一个结构体变量)。通过该文件信息区中的信息就可以访问这个文件,也就是说,通过文件指针变量就能够会遭到与他关联的文件。注 :所谓的输入输出,是以寄存器的视角。
2023-10-16 16:56:45
62
1
原创 C:位段的使用
题目中Env_Alarm_ID定义占4bit大小,Para1占2bit大小,state默认占1byte大小,avail占1bit大小。冒号后的数字是定义的n个bit位。而avail排在默认的atate后面,所以就会新开辟一个空间,avail在新的空间里面占1bit,所以整个结构体的大小就是3byte。(16位机器最大16,32位机器最大32,例如定义为27,在16位的机器上会出现问题。4、当一个结构体包含两个位段,第二个位段比较大,无法容纳于第一个位段剩余的位时,是舍弃还是利用,这是不知道的。
2023-09-23 21:15:24
26
1
原创 C:模拟实现memmove
memove函数用于字节拷贝。参数dest要求传入目标数组的首地址,参数source要求传入源数组的首地址,参数num传入的是字节数的大小,比如要传入4个int类型的元素,num就是4*4=16.memmove函数和memcpy函数的区别在于,前者可以用来拷贝当源数组和目标数组出现重合的情况。虽然memcpy也可以实现这个功能,但是在规定上来说,memcpy还是用于两个独立数组之间的拷贝。
2023-09-20 21:11:53
141
1
原创 C语言:多数元素(仅限于两种不同)
将每一个元素与下一个元素相比,把第一个元素赋值给ans,并且将cnt置“1”。之后与后面的元素进行对比。如果出现相同的元素cnt就加上去“1”,如果出现不同的元素就减去“1”。如果cnt为“0”,则将当前新的元素赋值给ans,这样随后剩下来的就是两种元素中为多数的元素。给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。输入:[2,2,1,1,1,2,2]输入:[3,2,3]
2023-09-15 17:24:04
214
1
原创 C语言:输入日期,计算这是一年的第几天
因为月份之间存在相同的数字,例如1,3,5,7,8,10,12是31天。4,6,9,11是30天,所以就可以使用switch函数,而有一个特例就是2月是28天,如果是闰年的话2月就是29天。那么在switch后面加上一个判断语句就可以了。注意:因为 输入的日期是当月的日期,所以要算到前面的一个月之后咋加上当月的天数。输入年月日,输出这是此年的第几天。输入:2012 12 31。
2023-08-29 23:43:47
3291
1
原创 写一个函数,判断一个字符是否为另一个字符旋转之后的字符
strcat函数的作用是将“来源”字符串追加到“目标地”字符串的末尾,目标地和来源不可以重叠。strstr函数的作用是在str1中查找字符串str2,若存在则返回str2在str1中第一次出现的地址,否则返回NULL.第一个参数是被查询参数,第二个参数是你已知的参数.assert准确的说是一个“宏”,作用是当括号内的结果为真,则继续下一段运行,如果为假,则断言报错。strcpy函数用作字符串的拷贝,第一个参数是“目标地”,第二个参数是“来源”,因来源参数不可更改所以加上const.追加到目标地字符后面。
2023-08-12 16:58:53
250
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人