自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 STL模板库笔记

对于关联容器(set\multiset\map\multimap),删除当前iterator时,仅仅会让当前的迭代器失效,可以在erase时,递增当前的iterator可以连续删除 set.erase(it++),因为它们底层都是。映射容器,是由 (key/value)组成的元素(字典、键值对),要求键值对中的key不能重复,而且会根据key进行排序,要求key的类型必须支持 < 运算符。集合容器,特点是元素不重复,会对元素自动排序,因此它存储的元素必须支持 < 运算符,只能迭代器遍历访问。

2022-11-07 10:46:14 154 1

原创 STL模板库笔记

功能:把链表lst指定[start,end)位置的元素合并到当前链表的指定pos位置中,位置以迭代器形式提供,lst会删除[start,end)位置开始的元素。= = < > 会对容器进行整体比较,根据字符串的比较规则进行比较(一个个元素按照字典序比较,一旦比较出结果就结束)功能:把链表lst指定del位置的元素合并到当前链表的指定pos位置中,位置以迭代器形式提供,lst会删除del位置开始的元素。功能:把链表lst合并到当前链表的指定位置中,位置以迭代器形式提供,lst会删除所有元素。

2022-11-06 09:18:08 241

原创 C++笔记

weak_ptr是为了配合shared_ptr而引入的一种智能指针,它指向一个由shared_ptr管理的资源,但是不影响该资源的生命周期,也即是weak_ptr指向一个由shared_ptr管理的资源时,shared_ptr。当智能指针离开了作用域时,它的析构函数就会自动释放,析构函数中执行了常规指针的释放操作,从而做到了自动释放内存的效果,避免了内存泄漏。无论是否由weak_ptr指向,一旦指向资源的shared_ptr计数为0,资源就释放,weak_ptr更像是shared_ptr的助手。

2022-11-03 09:02:52 427

原创 C++笔记

函数模板的类型参数也可以像成员函数的参数一样设置默认类型,规则与成员函数的默认形参一致,但是只有C++11语法才支持,编译需要加 -std=gnu++0x\ -std=c++0x。6、特化函数的形参和返回值类型的基础类型要与模板函数的基础类型要一致,否则会报错,例如:函数模板中使用了引用,特化也要加引用,也就是除了被特化的类型不同,其它要一致。模板虽好但是不是万能的,不能解决所有问题,有些特殊的类型与普通类型的运算规则不同,因此需要给特殊类型实现一个特殊版本,称为函数模板的特化版本,例如 char*

2022-11-01 21:27:59 521

原创 C++笔记

注意:在以二进制方式读写对象时,对象的成员不应该有指针(以及string)类型,因为在写入时只会写入指针成员变量(地址编号),而下一次读取该指针变量时,该指针所指向的内存极大。注意:在读写内建类型数据时,原有的 > 运算符就可以直接进行文本读写,但是在对类对象进行读写操作时,绝大多数的类成员变量是private,因此无法直接在类外进行读写。注意:C++中文件I/O流的write只有两种结果,要么num个字节全部写入成功,要么一个都没有写入,只需要使用good\fail 判断是否写入成功。

2022-11-01 11:20:47 331

原创 C++笔记

在父子类中,当子类覆盖了父类的同名虚函数,然后用父类指针或引用访问虚函数时,它既可能调用父类的虚函数,也可能调用子类的同名函数,具体调用哪个取决于该父类指针或引用。构造函数不能设置为虚函数,假如构造函数可以设置为虚函数,子类的构造函数会自动覆盖父类的构造函数,当创建子类对象时,子类执行自己的构造函数之前先执行父类的构造函数,但是。6、在执行子类的构造函数时,会按照继承表中的顺序执行父类的构造函数,默认执行的是父类的无参构造,可以在子类的构造函数的初始化列表中显示地调用父类的有参构造,最后才执行子类的。

2022-10-31 20:28:49 2761

原创 C++笔记

在实现类的全局运算符函数时,可能会使用类内的私有成员,此时全局运算符函数是没有访问权限,如果把私有成员变成public会打破类的封装性,或者实现get函数会很麻烦,C++提供了。注意:单目运算类的运算符对象都可以带常属性,因此重载的单目运算符函数必须是常函数,并且运算过程中都不会改变自身的值,而是产生一个临时的计算结果,并且是右值,只能返回带const。2、由于输入、输出运算符的调用者是左边的cin、cout,我们无法实现它们的成员运算符函数,只能实现全局的输入输出运算符函数。

2022-10-31 12:26:17 63

原创 C++笔记

2、虽然不能直接访问普通成员变量和普通成员函数,但是静态成员函数的作用域依然算作类内,因此只要让静态成员函数获得类对象的指针或引用,则依然有权限访问private、protected的。3、静态成员函数可以当做访问静态成员变量的接口,这样一方面不会破会静态成员变量的封装性,另一方面可以不需要创建对象即可调用静态成员函数,让类本身具有管理自己成员的能力。1、没有隐藏的this指针了,所以静态成员函数中无法直接访问普通成员变量和普通成员函数,但是可以直接访问静态成员变量和静态成员函数。

2022-10-30 11:21:48 94

原创 C++笔记

普通情况下编译器自动生成的拷贝构造完全够用,但是当类中的成员有指针且为指针分配了堆内存,默认的拷贝构造只会对指针的值进行拷贝,这样就导致了两个对象的指针成员都指向同一块堆。3、如果对象被const修饰过,就不能使用普通成员函数,编译会报错,因为此时传递的对象地址带有const属性,而普通的成员函数隐藏的this指针不带const属性,当类中有成员是指针类型且分配了堆内存,浅拷贝(默认的拷贝构造)只会拷贝指针变量的值,深拷贝不拷贝指针变量的值,而是申请新的内存,拷贝原内存中的内容到新内存中。

2022-10-25 19:14:41 58

原创 C++笔记

当调用函数时,编译器会优先调用类型最精确的函数,如果没有则会一定程度的类型提升或者是标准转换,而不是全部直接报错,但具体优先级与编译器有关,因此最优选择最准确的参数即可,内联函数也会被翻译成二进制指令,调用语句不会生成跳转指令,而是直接把函数的二进制指令替换调用语句,这样既没有跳转也没有返回,而是直接往下执行被调函数,这种函数称为内联函数。7、可以定义指针数组,但是不能定义引用数组(可以定义数组指针,也可以定义数组引用,可以定义函数指针,也可以定义函数引用)

2022-10-24 20:42:53 115

原创 C++笔记

b、结构中的结构成员可以是成员变量还可以是成员函数,结构变量、结构指针分别使用 . 或 -> 访问成员函数,在成员函数中可以直接访问本结构的其他成员变量、成员函数,不再需要 . ->b、联合中的成员可以是成员变量还可以是成员函数,联合变量、联合指针分别使用 . 或 -> 访问成员函数,在成员函数中可以直接访问本联合的其他成员变量、成员函数,不再需要 . ->在C++中,void*不可以自动转换成其它类型的指针,如果需要赋值给其它类型的指针时,只能强制类型转换后才能赋值,为了提高指针访问内存的安全性考虑。

2022-10-22 16:20:27 873

原创 网络通信-线程竞争

缺点:该策略实现比较麻烦,而且释放已经申请的资源可能会导致前一阶段的工作无效,反复地申请释放资源也会增加系统开销、占用CPU和寄存器、内存等资源。多个进程或者线程之间互相等待对方手中的资源,在得到新的资源之前不会主动释放自己手中的资源,这样如果形成了等待环路,称之为死锁现象。当一个进程或线程已经占用一个不可被剥夺的资源,并且在请求新资源无法被满足时,则释放已经占用的资源,等待一段时间后重新申请。给每个资源起编号,进程或线程按照编号顺序依次请求资源,并且只有拿到前一个资源,才能继续请求下一个资源。

2022-10-11 09:09:00 137

原创 网络通信-线程管理

2、早期各个厂商有自己私有的线程库,而且接口的实现差异较大,不利于移植,世界标准化组织与1995年,制定了统一的线程接口标准规范,遵循该标准的线程称为POSIX线程,简称pthread。1、线程是进程的执行路线,它是进程内部的控制序列,或者说线程是进程的一部分(进程是一个资源单位,线程是执行单位,线程是进程的一部分,负责真正的执行)8、进程中的所有线程同在一个虚拟地址空间中,进程中的所有资源对于线程而言都是共享的,因此当多个线程协同工作时需要解决资源竞争问题(加锁)线程栈末尾的警戒缓冲区大小。

2022-10-10 21:01:54 300

原创 网络通信-多路复用

readfds、writefds、exceptfds 这三个集合参数既是输入也是输出,调用select时这三个集合需要存储被监控的文件描述符,/* Epoll events */ 要监控事件,参考poll。/* file descriptor */ 被监控的文件描述符。/* returned events */ 实际监控到的事件。/* requested events */ 想要监控的事件。2、会把发生事件的描述符返回,不需要遍历所有的描述符,大大地节约时间。

2022-09-21 14:18:31 839

原创 网络通信-TCP/UDP

* Port number */ 端口号 大端数据。准备通信地址(端口号+ip地址) 准备通信地址(端口号+服务器公网ip地址)关闭socket 关闭socket。功能:把字符串格式的点分十进制表示的ip地址转换成整数形式的ip地址(大端)功能:把整数形式的ip地址(大端)转换成字符串格式的点分十进制表示的ip地址。

2022-09-18 08:35:36 107

原创 网络进程间的通信

实际传递的是 sockaddr_un或者sockaddr_in 结构体指针,需要把它们统一转换为sockaddr*类型,但是C语言没有自动类型识别转换,需要进行强转。/* AF_UNIX */ 地址簇 domain写什么这就写什么。addrlen:地址结构体的字节数,用于区分 sockaddr_un还是sockaddr_in。

2022-09-16 08:45:47 248

原创 Linux环境编程-XSI的进程间通信

MSG_NOERROR 如果不包含此标志,如果实际发送过来的数据字节数>接收的字节数,则返回失败,如果包含此标志,那么就只读取接收的字节数,一定会成功。2、如果信号量的值等于0,说明没有资源可使用,此时进程进入休眠,直到信号量的值大于0,进程会被唤醒,执行步骤1。SEM_UNDO 如果进程终止没有手动环资源,系统会自动还。

2022-09-15 09:00:47 123

原创 Linux环境编程-进程间通信

对于子进程的结束而言,都希望父进程能够知道并作出一定的反应,通过 wait waitpid 函数可以知道子进程是如何结束的以及它的结束状态码。什么是进程间通信,是指两个或多个进程之间交互数据的过程,因为进程之间是相互独立的,为了进程间协同工作就必须实现进程间交互数据。管道是UNIX系统中最古老的进程间通信技术,古老意味着所有系统都支持,早期的管道是半双工通信,现有的系统管道是全双工通信。注意:无论进程是如何结束的,它们最后都会执行同一段代码,会关闭所有打开的文件,并释放所有的内存。

2022-09-07 15:45:49 260

原创 Linux环境编程-进程管理

孤儿进程:父进程先于子进程结束,子进程就变成了孤儿进程,孤儿进程会被孤儿院(init守护进程)领养,init就是孤儿进程的父进程。1、通过fork创建的子进程会拷贝父进程(数据段、bss段、堆、栈、I/O缓冲区),与父进程共享代码段、子进程会继承父进程的信号处理方式。一个进程可以被另一个进程创建,创建者叫做父进程,被创建者叫子进程,子进程被父进程创建后会在操作系统的调度下同时运行。当子进程先于父进程结束,死前子进程会向父进程发送信号SIGCHLD,此时父进程应该去回收子进程的相关资源。

2022-09-06 11:14:38 160

原创 Linux环境编程-信号处理

2、当信号处理完后可能会返回产生信号的代码继续运行,如果我们捕获并处理段错误、算术异常等信号可能会产生死循环,正确的处理段错误、算术异常信号应该是备份数据并直接结束程序。当程序执行到一些特殊的操作时,不适合去处理信号,此时可以让内核屏蔽信号,等操作执行完成后再解除屏蔽重新发送信号。当信号产生时,内核会在其维护的信号表中为对应的进程设置与该信号对应的标记,这个过程叫做递送。// 信号处理动作标志。

2022-09-05 18:52:40 131

原创 Linux环境编程-文件操作

每个文件必须拥有唯一的一个inode以及若干个block块,读写文件需要借助目录的block中记录的文件名和inode号找到该文件的inode,通过inode读取block。硬链接:硬链接文件没有自己的inode和block,只是在不同目录下复制了一份源文件的inode信息,通过inode信息访问源文件的block。软链接:软链接会建立自己的新的inode和block,软链接的block存储的是源文件的inode信息。

2022-09-03 16:05:00 103

原创 Linux环境编程-文件管理

UNIX/Linux系统把所有的服务、设备等一切内容都抽象成了文件,并提供了一套简单而同一的接口,这部分接口就是系统文件的读写调用,简称系统IO。每个打开的文件都有一个记录读写位置的指针,叫做文件位置指针,所有对文件的读写操作都是从该指针的位置进行的,该指针会随着文件的读写自动往后移动。3、它代表了一个内核对象,因为内核不能暴露它的内存地址,因此不能返回真正的内核对象地址,只能用文件描述符来对应。4、内核中有一张打开文件的表格,文件描述符是访问这张表的下标,因此也称为"句柄",相当于访问已打开文件的凭证。.

2022-08-31 19:20:53 56

原创 Linux环境编程-内存管理

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

2022-08-29 19:45:08 67

原创 Linux系统下的环境编程

pragma GCC dependency "file.h" 监控文件,如果被监控的文件修改时间在当前文件之后,就会产生警告。GNU组织:通用的非商业类UNIX操作系统,目前世界上最大的开源组织,负责Linux内核。Linux,全称GNU/Linux,是一种免费使用和自由传播的类UNIX操作系统,其内核由。Linux的标志:小企鹅,因为企鹅是南极洲标志性动物,目前南极是没有任何国家占有,POSIX:可移植操作系统接口规范,UNIX和Linux都是基本遵循该标准的,...

2022-08-26 18:59:19 89

原创 数据结构与算法-查找和排序

数据 经过 哈希函数 计算出数据再哈希表中的位置,然后标记位置,方便之后的查找,它的时间复杂度可以达到O(1),但是该算法有很大的局限性,不适合负数、浮点型数据、字符型数据的查找,还需要额外申请存储空间,空间复杂度高,是一种典型的以空间换时间的算法。冒泡:数据左右进行比较,把最大的数一直交换到最后,特点是该算法对数据的有序性敏感,在排序过程中发现有序可以立即停止排序,如果待排序的数据基本有序,则冒泡的效率非常高。根据数据的值存储到不同的桶中,然后再调用其它的排序算法,对桶中的数据进行排序,

2022-08-24 08:51:16 419

原创 数据结构与算法-图

通常表示: G(V,E) G表示一个图,V是图中顶点集合(元素),E(edge)是图中所有边(元素之间的关系)的集合。度:依附于顶点的边的数量称之为该顶点的度,有向图中,度分为出度(从该顶点出发的弧的数量)、入度(指向该顶点的弧的数量)边用方式表示,仅仅表示从A点到B点的边,有向图中边也叫做弧,A是弧尾,B是弧头。注意:不讨论顶点到自身的边,且不讨论重复的边,这种图统称为简单图,数据结构中只研究简单图。边的权重:图中的边附带有意义的数据,这些数据叫做边的权重,带权重的图也称为网。

2022-08-22 20:37:33 133

原创 数据结构与算法-数组与矩阵

压缩方式:使用一维数组进行存储,把它当做上三角或下三角进行压缩即可。i和j要满足:当i>j 除了还原(i,j) 还要还原(j,i)沿着对角线(0,0)(1,1)... 旁边的两边都有数据。i和j要满足:abs(i-j)

2022-08-19 19:03:31 120

原创 数据结构与算法-二叉树

是一种完全二叉树,待比较的数据都存储在最后一层,根节点是根据左右子树其中一个生成,因此根节点是最大或者最小的,选择树的功能是快速地找出最大值或者最小值。有序链式二叉树中有很多的空指针,可以让这些指针指向下一个或者前一个节点,这样在遍历时可以不用递归而可以使用循环遍历,可以提高树的遍历速度。有序二叉树的中序遍历刚好就是从小到大 所以有序二叉树也是一种排序算法,查找又天然是二分查找,所以经常考。左子树的数据小于根,右子树的数据大于等于根,这种树称为有序二叉树、二叉搜索树、二叉排序树。堆可以实现优先队列的效果。.

2022-08-18 20:01:40 154

原创 数据结构与算法-二叉树

二叉树是n个有限元素的集合,该集合或者为空、或者由一个称为根(root)的元素及两个不相交的、被分别称为左子树和右子树的二叉树组成,是有序树。完全二叉树:深度为k,有n个节点的二叉树当且仅当其每一个节点都与深度为k的满二叉树中编号从1到n的节点一一对应时,称为完全二叉树。双亲节点和孩子节点:节点的子树被称为该节点的孩子节点,该节点就是孩子节点的双亲节点。节点的层次:根节点的层次为1,它的孩子层次为2,孩子的孩子层次为3,以此类推。祖先:从根节点出发到该节点,路劲上经过的所有节点都称为该节点的祖先。...

2022-08-12 20:01:21 93

原创 数据结构与算法笔记

链表的最后一个结点的next不再指向NULL,而是指向头结点,这种链表称为单向循环链表,简称循环链表,它的好处是可以通过任意结点来遍历整个链表。牺牲了随机访问的功能、也没达到链表动态申请内存的效果,只是给没有指针的编程语言实现链表的一种方法,适用范围不大。这种链表在插入删除时需要修改游标的值,而不用申请、释放结点内存就可以达到类似链式结构的效果。静态链表的结点存储在连续的内存中,通过游标来访问下一个结点。尾添加的效率低、非法下标的判断效率也非常低。前驱指针 prev。后继指针 next。...

2022-08-09 08:23:07 102

原创 数据结构与算法笔记

由一维数组+队头下标front+队尾下标tail组成,入队tail++,出队front++,为了让队列能够反复使用,我们把队列想象成一个环,因此当front和tail加1后都需要用队列容量求余再重新赋值。练习一:实现一个函数,序列a为入栈顺序,判断序列b是否是序列a的出栈顺序。创建、销毁、入队、出队、队空、队满、查队头、查队尾、数量。创建、销毁、入栈、出栈、栈顶、栈满、栈空。运算:创建、销毁、队空、入队、出队、队头、队尾。创建、销毁、入栈、出栈、栈空、栈顶。有两个端口,一个端口只能入队,另一个只能出队。..

2022-08-08 12:25:05 97

原创 数据结构与算法笔记

数据元素存储在彼此相互独立的内存中,每个独立的元素也叫做结点,每个结点中增加一项数据项用于存储其它相关结点的地址,以此表示结点之间的关系。缺点:添加、删除结点时,可能修改指向第一个结点的指针,参数需要使用二级指针,才能更改指针的指向,比较麻烦。第一个结点的数据域不存储有效元素,仅仅只是使用它的指针域永远指向链表的第一个数据有效的结点。创建、销毁、清空、插入、删除、访问、查询、修改、排序、遍历。数据元素:组成数据的有一定含义的基本单位,也叫做结点、节点、记录。数据项:有独立含义的数据的最小单位,也称为域。..

2022-08-06 08:26:55 364

原创 C语言笔记-文件

每个通过fopen打开的文件都有一个文件位置指针来记录着接下来要读写的位置,以r、r+、w、w+打开文件,位置指针在文件的开头,以aa+打开文件,位置指针自动在末尾。返回值文件指针,不需要关心里面有什么数据,只需要知道它是一个针对已打开文件的凭证,打开文件失败会返回NULL。练习2设计并定义一个教师结构变量并初始化,以二进制的方式写入到文件中。练习4设计并定义一个教师结构变量并初始化,以文本的方式写入到文件中。stream文件指针,fopen的返回值,表示往哪个文件写入数据。...

2022-07-29 08:47:52 113

原创 C语言笔记-结构联合枚举

由于结构变量的字节数一般都比较大,普通的值传递效率非常低,因此传递结构变量的地址,也即是传递结构指针变量,此时想要通过结构指针变量访问成员时借助->,如果不需要修改指针变量的成员值,可以使用const保护一下。枚举就是一种数据类型,把可能出现的所有值罗列出来,并起一个有意义的名字表示这些值,除此之外给该类型的变量赋其它值,是非法的(愿望)如果不给成员值,那么枚举中的值第一个默认从0开始,逐渐+1,如果设置了某个值,后面的成员在它的基础上逐渐+1。typedefstruct结构类型名结构类型名;...

2022-07-27 08:23:46 81

原创 C语言笔记-Makefile

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

2022-07-25 08:24:45 328

原创 C语言笔记-头文件

1、当想要从缓冲区中读取整型、浮点型数据,而缓冲区中的数据是字符、字母时,此次读取会失败,而且并不会从缓冲区中拿走该数据,导致接下来所有数据的读取都出问题。3、先输入其他类型数据,再输入字符、字符串数据,那么其他类型数据输入时最后按下'\n'或者空格就会被字符、字符串接收,影响正常的输入。在终端输入的数据,按下回车后,会从终端存储进输入缓冲区中,再执行输入函数时,会从输入缓冲区中读取相应的数据。2、如果需要某个.c文件中的全局变量、函数、宏等内容时,只需要把它的头文件导入即可。...

2022-07-23 08:09:38 499

原创 C语言笔记

返回值needle在haystack中首次出现的位置,如果找不到则返回NULL。功能比较两块内存的值,按照字节比较,一旦比较出结果后面不再比较。4、查找联系人,按照电话或者姓名,支持模糊查找。功能从src位置拷贝n个字节到dest的位置。返回值s1==s20。功能字符串转longlong类型。功能把各种类型的数据输出给字符串str。功能从str中解析读取数据到变量中。功能字符串转double类型。功能字符串转long类型。功能字符串转int类型。...

2022-07-22 08:21:27 116

原创 C语言笔记-字符串

程序并不是立即从键盘获取输入的内容,而是当按下回车后,终端输入的内容会先存储到输入缓冲区中,然后输入函数再从输入缓冲区中读取数据到内容中。1、当想要读取整型或浮点型数据,但是缓冲区中的数据是符号或字母时,读取会失败,数据会残留载缓冲区中,影响接下来所有数据的读取。从头开始,每个字符一对一进行比较,按照字典序,谁出现在前谁小,一旦比较出结果,立即返回结果,后面的不再比较。3、当先输入整型、浮点型数据,再输入字符、字符串时,前一次的输入会残留'\n',影响了后面字符、字符串的输入。...

2022-07-21 08:10:45 112

原创 C语言笔记-指针

1、当首次向malloc申请内存,malloc会向操作系统申请内存,操作系统会直接分配33页(1页=4096字节)内存交给malloc管理,但是并不意味着可以越界访问,因为malloc可能把其他的内存分配给“其他人”,这样就会产生脏数据。2、每个内存块之间会有空隙(4~12字节),一部分空隙是为了内存对齐,其中一定有4字节记录了malloc的维护信息,这些维护信息决定了下一次malloc分配内存的位置,如果破坏了维护信息,会影响下一次malloc或者free的过程。...

2022-07-20 08:15:14 306

原创 C语言笔记

当我们为了提高传参效率而使用指针作为函数参数时,传参效率提高了,但是变量被共享存在被修改的风险,可以使用const保护指针所指向内存。指针是一种特殊的数据类型,使用它可以定义指针变量,指针变量存储的是整型数据,代表了内存的编号,通过这个编号可以访问对应的内存。通过指针变量中记录的内存的编号去访问对应的内存,该过程可能会产生段错误,原因是里面存储的内存编号是非法的。指针-指针(指针-指针)/指针类型宽度计算两个指针之间间隔了多少个指针元素。1、当函数的参数是指针,别人传给你的指针可能是空指针。...

2022-07-19 08:28:51 30

空空如也

空空如也

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

TA关注的人

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