e我所欲也的博客

记录学习与生活
私信 关注
e我所欲也
码龄2年

在很窄的胡同里长跑

  • 58,491
    被访问量
  • 92
    原创文章
  • 56,283
    作者排名
  • 120
    粉丝数量
  • 于 2019-03-16 加入CSDN
获得成就
  • 获得249次点赞
  • 内容获得23次评论
  • 获得203次收藏
荣誉勋章
兴趣领域
  • #后端
    #Linux#C/C++
TA的专栏
  • c++
    26篇
  • MySQL数据库
    4篇
  • 数据结构
    19篇
  • Linux
    16篇
  • 计算机网络
    11篇
  • C语言进阶复习
    5篇
  • c语言
    17篇
  • 最近
  • 文章
  • 资源
  • 问答
  • 课程
  • 帖子
  • 收藏
  • 关注/订阅

C++ 智能指针

文章目录为什么需要智能指针?内存泄漏什么是内存泄漏内存泄漏的危害内存泄漏分类如何避免内存泄漏智能指针的使用及原理RAII智能指针的原理std::auto_ptrstd::unique_ptrstd::shared_ptrshared_ptr的线程安全std::shared_ptr的循环引用为什么需要智能指针?C++由于没有gc(Java的自动回收机制),new/malloc 等出来的资源,是需要我们去手动释放。在开发过程中常常会出现这两种问题:1、忘记释放(粗心大意)2、发生异常安全问题(由于抛异
原创
61阅读
0评论
3点赞
发布博客于 7 月前

C++ 异常

文章目录C语言传统的处理错误的方式C++异常概念异常的使用异常的抛出和捕获异常的重新抛出异常安全异常规范自定义异常体系异常的优缺点总结C语言传统的处理错误的方式传统的错误处理机制:终止程序,如assert,exit,缺陷:用户难以接受。如发生内存错误,除0错误时就会终止程序。返回错误码,缺陷:需要程序员自己去查找对应的错误。如系统的很多库的接口函数都是通过把错误码放到errno中,表示错误实际中C语言基本都是使用返回错误码的方式处理错误,部分情况下使用终止程序处理非常严重的错误。这种传统的
原创
175阅读
0评论
1点赞
发布博客于 7 月前

C++11 常用的基础特性

文章目录列表初始化内置类型的列表初始化自定义类型的列表初始化变量类型推导auto类型推导decltype类型推导范围for循环final与override新增加容器默认成员函数控制显式缺省函数删除默认函数NULL与nullptr 空值指针右值引用右值引用概念左值与右值引用与右值引用比较值的形式返回对象的缺陷移动语义右值引用引用左值完美转发lambda表达式lambda表达式语法函数对象与lambda表达式C++11简介在2003年C++标准委员会曾经提交了一份技术勘误表(简称TC1),使得C++03这
原创
73阅读
0评论
1点赞
发布博客于 7 月前

MySQL数据库(四)表的内外连接、索引、事务管理、视图、用户管理

文章目录表的内连和外连内连接外连接表的内连和外连表的连接分为内连和外连内连接内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选,我们前面学习的查询都是内连接,也是在开发过程中使用的最多的连接查询。语法:select 字段 from 表1 inner join 表2 on 连接条件 and 其他条件;//显示SMITH的名字和部门名称-- 用前面的where写法select ename, dname from EMP, DEPT where EMP.deptno=DEPT.d
原创
55阅读
0评论
1点赞
发布博客于 7 月前

MySQL数据库(三) 聚合函数、内置函数、复合查询

文章目录表的增删改查增基本查询(单个表内)改(Update)删(Delete)聚合函数group by子句的使用内置函数日期函数字符串函数数学函数复合查询多表查询自连接子查询合并查询表的增删改查增语法:INSERT [INTO] table_name [(column [, column] ...)] VALUES (value_list) [, (value_list)] ...-- 创建一张学生表create table students ( id int unsigned prim
原创
122阅读
0评论
1点赞
发布博客于 7 月前

MySQL数据库(二)数据类型、表的约束

文章目录数据类型分类数值类型bit类型小数类型字符串类型日期和时间类型enum和set数据类型分类数值类型数值越界测试:在MySQL中,整型可以指定是有符号的和无符号的,默认是有符号的。mysql> create table tt1(num tinyint); 有符号:范围 -128~127mysql> insert into tt1 values(128); -- 越界插入,报错ERROR 1264 (22003): Out of range value for colum
原创
63阅读
0评论
1点赞
发布博客于 7 月前

MySQL数据库(一)库的操作、表的操作

文章目录数据库基础主流数据库服务器,数据库,表关系SQL分类字符集和校验规则字符集校验规则库的操作创建数据库(create)查看数据库(show)修改数据库(alter)数据库删除(drop)`注意:不要随意删除数据库`备份和恢复(mysqldump / source)其他操作表的操作创建表(create)修改表(alter)删除表(备份/恢复)数据库基础什么是数据库? 存储数据用文件就可以了,为什么还要弄个数据库?文件保存数据有以下几个缺点:文件的安全性问题文件不利于数据查询和管理文件不利于
原创
70阅读
0评论
1点赞
发布博客于 7 月前

哈希应用 位图与布隆过滤器 及海量数据处理问题

文章目录位图布隆过滤器海量数据面试题思路分析位图先介绍一个题:给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在这40亿个数中。解决方案:遍历,时间复杂度O(N)排序(O(NlogN)),利用二分查找: logN把数据放入map或者unordered_map中,树形结构查找位图解决面对这个问题我们首先想到的就是前三种。但是前三种做法的前提就是需要把数据移到内存上才可以运行,但是40亿个整型,差不多16个G(十亿字节差不多为一个G,一个整型占四个字节),而
原创
95阅读
0评论
2点赞
发布博客于 7 月前

哈希表 底层原理及unordered_map/unprdered_set的简单实现

文章目录前言unordered_map/_set的介绍底层结构哈希概念哈希冲突哈希函数哈希冲突解决闭散列开散列开散列增容与插入开散列与闭散列比较模拟实现unordered_set模拟实现unordered_map前言在C++98中,STL提供了底层为红黑树结构的一系列关联式容器,在查询时效率可达到O(log2N),即最差情况下需要比较红黑树的高度次,当树中的节点非常多时,查询效率也不理想。最好的查询是,进行很少的比较次数就能够将元素找到.因此在C++11中,STL又提供了4个unordered系列的
原创
523阅读
0评论
2点赞
发布博客于 7 月前

红黑树 插入元素时的旋转着色分析及Map/Set的简单实现

文章目录序列式容器与关联式容器Map与Set的简单介绍set的简单介绍map的简单介绍红黑树红黑树的概念红黑树节点的定义封装搜索树的迭代器红黑树插入节点的控制红黑树的迭代器红黑树的检测set的简单模拟(插入操作和迭代器遍历)map的简单模拟(插入操作和迭代器遍历)序列式容器与关联式容器我们之前已经接触过STL中的部分容器,比如:vector、list、deque等,这些容器统称为序列式容器,因为其底层为线性序列的数据结构,里面存储的是元素本身。而关联式容器也是用来存储数据的,与序列式容器不同的是,其里
原创
204阅读
0评论
2点赞
发布博客于 7 月前

平衡搜索树AVL 插入操作及旋转分析

文章目录AVL树的概念AVL树节点的定义AVL树的插入如何根据平衡因子维护平衡AVL树的旋转右单旋左单旋双旋:先左单旋再右单旋双旋之先右单旋再左单旋AVL树的验证AVL树的性能AVL树的概念二叉搜索树虽可以缩短查找的效率,但如果数据有序或接近有序二叉搜索树将退化为单支树,查找元素相当于在顺序表中搜索元素,效率低下(O(N))。因此,两位俄罗斯的数学家G.M.Adelson-Velskii和E.M.Landis在1962年发明了一种解决上述问题的方法:当向二叉搜索树中插入新结点后,如果能保证每个结点的左
原创
102阅读
0评论
3点赞
发布博客于 8 月前

并发服务器 IO多路复用之poll 与 epoll(重点)

文章目录I/O多路复用之pollpoll函数接口poll示例: 使用poll监控标准输入(模式)I/O多路复用之epollepoll_create 创建epoll操作句柄epoll_ctl epoll的事件注册函数epoll_wait 监控epoll工作原理epoll的优点(和 select 的缺点对应)epoll工作方式epoll示例: 使用epoll监控标准输入(水平触发LT模式)epoll示例2: 使用epoll监控标准输入(边缘触发ET模式)I/O多路复用之pollpoll函数接口#i
原创
541阅读
0评论
2点赞
发布博客于 8 月前

并发TCP服务器 IO多路复用之select

文章目录前言初识selectselect函数原型理解select执行过程socket就绪条件select使用示例: 检测标准输入输出select优缺点基于select的并发TCP服务器通信前言记得我们之前写的TCP客户端服务端通信小demo中有个小问题:accept函数和read函数一旦阻塞在其中一个中的话,另一个就没法对相应的请求做出响应,即如果在accept中等待一个连接请求,我们就不能响应输入的命令(接收数据)。类似地,如果在read中等待一个输入命令,我们就不能响应任何连接请求。但是一个并发服务
原创
120阅读
0评论
4点赞
发布博客于 8 月前

LInux -- 五种典型的IO模型

文章目录1.阻塞IO模型2.非阻塞IO模型3.信号驱动IO模型4.多路复用IO模型5.异步IO模型首先要理解的概念:IO即输入输出事件,而我们知道不论是标准IO还是文件IO,其实都是要和内存管理和磁盘文件等硬件有关,且Linux下一切皆文件,而在系统中想要实现用户层和内核层交互,只能调用系统调用接口,而对于IO来说,无论是c语言的文件IO函数还是其他语言的IO函数,底层也都是封装了系统调用文件IO来实现用户层与系统层的交互的。而常用的系统文件IO接口read/write。任何IO过程中, 都包含
原创
137阅读
0评论
3点赞
发布博客于 8 月前

网络基础(六)数据链路层、ARP协议、ICMP协议及DNS域名系统

文章目录网络通信过程简述数据链路层概念及功能认识MAC地址以太网MTU(最大传输单元)ARP协议DNS(Domain Name System)域名解析协议ICMP协议ping命令网络通信过程简述基于TCP/IP协议网络通信的过程中,将发出数据的主机称为源主机,接收数据的主机称为目的主机。当源主机发出数据时,数据在源主机中从上层向下层传送。源主机中的应用进程先将数据交给应用层,应用层加上必要的控制信息就成了报文流,向下传给传输层。传输层将收到的数据单元加上本层的控制信息,形成报文段、数据报,再交给网际层
原创
439阅读
0评论
3点赞
发布博客于 8 月前

网络基础(五)网络层IP协议、NAPT端口映射及路由选择

文章目录基本概念主机: 配有IP地址, 但是不进行路由控制的设备; 路由器: 即配有IP地址, 又能进行路由控制; 节点: 主机和路由器的统称;
原创
621阅读
0评论
3点赞
发布博客于 8 月前

网络基础(四) TCP的可靠传输

文章目录TCP协议的复杂性和功能检验和(发送方填充)序列号确认应答机制超时重传机制滑动窗口机制快速重传机制流量控制拥塞控制机制慢启动与拥塞避免算法快恢复延迟应答机制捎带应答机制另外面向字节流TCP异常情况保活计时器基于TCP应用层协议TCP小结TCP协议的复杂性和功能应用层向TCP层发送用于网间传输的、用字节表示的数据流,然后TCP把数据流分区成适当长度的报文段(通常受该计算机连接的网络的数据链路层的最大传输单元(MTU)的限制)。之后TCP把结果包传给IP层,由它来通过网络将包传送给接收端实体的TC
原创
727阅读
2评论
7点赞
发布博客于 8 月前

二叉搜索树 增删查操作

文章目录二叉搜索树二叉搜索树的实现增(插入)操作查找操作删除操作改?二叉搜索树的应用前言:在现在数据为王的时代,数据的存储量一般都是很大的,为了在大量信息中找到某些值,就需要用到查找技术,为了提高查找效率,需要对数据进行排序。排序和查找的数据处理量几乎是整个数据处理量的80%,故排序和查找的有效性直接影响到基本算法的有效性。因而查找和排序是十分重要的处理技术。往期基于线性表的排序方法--------》八大排序C语言实现版本而基于线性表的查找方法一般分为: 顺序查找和二分查找。接着便是学习基于树结
原创
108阅读
0评论
1点赞
发布博客于 8 月前

网络基础(三)传输层UDP / TCP协议

文章目录传输层概念及功能UDP协议传输层概念及功能传输层是整个网络体系结构中的关键层次之一,主要负责向两个主机中进程之间的通信提供服务。传输层在终端用户之间提供透明的数据传输,向上层提供可靠的数据传输服务。传输层在给定的链路上通过流量控制、分段/重组和差错控制来保证数据传输的可靠性。传输层的服务一般要经历传输连接建立阶段,数据传送阶段,传输连接释放阶段3个阶段才算完成一个完整的服务过程。而在数据传送阶段又分为一般数据传送和加速数据传送两种形式。传输层中最为常见的两个协议分别是传输控制协议TCP
原创
1154阅读
0评论
2点赞
发布博客于 8 月前

网络基础(二)应用层HTTP协议

文章目录TCP协议的面向字节流特性以及引申出来的粘包问题HTTP协议介绍通用资源定位符URLweb服务器以两种不同的方式向客户端提供内容:简单的URL格式分析:Http协议的组成1.HTTP请求2.HTTP响应应用层: 负责应用程序之间的数据传输,我们程序员就工作在这一层上TCP协议的面向字节流特性以及引申出来的粘包问题从套接字编程角度对于传输层TCP协议特点里的—面向字节流解读从创建一个TCP的socket起, 同时在内核中创建一个发送缓冲区和一个接收缓冲区;对于发送:1.调用write时
原创
190阅读
0评论
2点赞
发布博客于 8 月前

C++ 多态与虚函数

文章目录1. 多态的概念多态的性质多态的分类2. 虚函数实现动态多态性多态的构成条件虚函数虚函数重写的两个例外(不是特定规则)C++11 override 和 final3.纯虚函数与抽象类纯虚函数:抽象类接口继承和实现继承4.多态的原理虚函数表动态绑定与静态绑定(关联)5.单继承和多继承关系中的虚函数表多态的概念多态的定义及实现抽象类多态的原理单继承和多继承关系中的虚函数表继承和多态常见的面试问题1. 多态的概念多态的性质多态性是面向对象程序设计的一个重要特性。多态本意:一个事物有
原创
88阅读
0评论
2点赞
发布博客于 8 月前

C++ 继承(二)

文章目录6.继承与友元7.继承与静态成员8.复杂的菱形继承及菱形虚拟继承菱形继承的问题虚拟继承9.继承和组合上文链接—>继承(一)6.继承与友元友元具体讲解—》友元复习友元函数复习:用法:在类体中用friend对某函数声明,此函数就称为本类的友元函数。说明:友元函数可访问类的私有和受保护成员,但不是类的成员函数(没有this 指针)友元函数不能用const修饰友元函数可以在类定义的任何地方声明,不受类访问限定符限制一个函数可以是多个类的友元函数,或者说,友元函数不仅可以是一个非成
原创
100阅读
0评论
1点赞
发布博客于 9 月前

C++ 继承(一)

文章目录前言:继承的概念及定义继承中的作用域(访问属性)1.继承的概念及定义2.基类和派生类对象赋值转换3.继承中的作用域4.派生类的默认成员函数5.继承与友元6.继承与静态成员7.复杂的菱形继承及菱形虚拟继承8.继承的总结和反思9.笔试面试题前言:面向对象程序设计的四个主要特点:抽象、封装、继承、多态性,之前以了解了抽象和封装,现在开始总结继承的特征。问题:学校写一个管理系统,学生类和老师类里面都要用到年龄、姓名、性别等成员变量,或者相同的打卡、签到等成员函数,这样难免做了很多
原创
133阅读
0评论
2点赞
发布博客于 9 月前

c++ 输入输出流

文章目录输入输出流的含义标准I/O文件I/O文件概念文件流对象前言前面所用到的输入和输出,都是以终端为对象的,即从键盘输入数据,运行结果输出到显示器屏幕上。从操作系统的角度看,每个与主机相连的输入输出设备都看作一个文件。例如.终端键盘是输入文件,显示屏和打印机是输出文件。除了以终端为对象进行输入和输出外,还经常用磁盘或光盘作为输入输出对象,这时,磁盘文件既可以作为输入文件,也可以作为输出文件。说明:C语言采用函数实现输入输出(如scanf和printf函数),c++采用类对象来实现输入输出
原创
193阅读
0评论
0点赞
发布博客于 9 月前

c++ 模板进阶

文章目录非类型模板参数模板的特化函数模板特化类模板特化非类型模板参数模板参数分为类型形参与非类型形参。类型形参:即出现在模板参数列表中,跟在class或者typename之类的参数类型名称。非类型形参:就是用一个常量作为类(函数)模板的一个参数,在类(函数)模板中可将该参数当成常量来使用。以定义模板类型的静态数组为例:// 定义一个模板类型的静态数组,对于静态数组,一般都要提前知道开多大的空间,template<class T, size_t N = 10>class array
原创
93阅读
0评论
2点赞
发布博客于 9 月前

STL deque与常见的容器适配器 stack、 queue、 priority_queue

文章目录dequedeque的原理图deque的应用场景容器适配器stackqueuepriority_queuedequedeque双端队列是动态大小的序列式容器,其可以向两端进行伸缩。特定的库可以以不同的方式实现deque,但通常都是一种动态数组。不论在何种情况下,它都允许通过随机访问迭代器直接访问单个元素,可以根据需要动态的伸缩。因此,deque提供了一些与vector相似的功能,但deque在头部和尾部进行数据插入和删除操作更加高效。与vector不同的是,deque不能保证所有的元素存储
原创
89阅读
0评论
2点赞
发布博客于 9 月前

STL list模拟实现及vector与list的对比

文章目录list的介绍list模拟实现对比vector与listlist的介绍list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中(不像vector、string等存储位置是连续的),所以在节点中通过指针指向其前一个元素和后一个元素使各个元素关联起来。与其他的序列式容器相比(string,vector,deque),优点是:list通常在任意位置进行插入、移除元素的执行效率更好。与其
原创
72阅读
0评论
2点赞
发布博客于 9 月前

STL vector模拟实现及迭代器失效问题

文章目录
原创
96阅读
0评论
2点赞
发布博客于 9 月前

网络编程 socket(三) 基于TCP的客户端-服务端的并发程序(多进程&多线程)

文章目录再谈TCP协议通讯流程多进程版本多线程版本再谈TCP协议通讯流程服务器初始化:调用socket, 创建文件描述符;调用bind, 将当前的文件描述符和ip/port绑定在一起; 如果这个端口已经被其他进程占用了, 就会bind失败;调用listen, 声明当前这个文件描述符作为一个服务器的监听描述符, 为后面的accept做好准备;调用accecpt, 并阻塞, 等待客户端连接过来。建立连接的过程:调用socket, 创建文件描述符;调用connect, 向服务器发起连接请
原创
252阅读
0评论
2点赞
发布博客于 9 月前

网络编程 socket套接字(二)基于TCP的客户-服务端通信小程序(单连接版)

文章目录TCP编程流程TCP套接字接口介绍监听描述符和已连接描述符之间的区别基于tcp的客户端—服务端通信小程序(单连接版)TCP编程流程TCP套接字接口介绍TCP协议不同于UDP,TCP是面向连接的,必须要在双方已经连接上的前提下才可以进行通信。两者创建套接字都是同样的接口,不同的是客户端通过调用connect函数来建立和服务器的连接。剩下的套接字函数bind、listen和accept被服务器用来和客户端建立连接。创建 socket 文件描述符 (TCP/UDP, 客户端 + 服务器)
原创
443阅读
0评论
2点赞
发布博客于 9 月前

网络编程 socket(一) 基于UDP的客户端和服务端的小程序

文章目录TCP/IP协议简单理解再谈端口号连接UDP协议简单介绍UDP套接字的编程流程及接口介绍基于udp的客户端-服务器端的的通信小程序每台因特网主机都运行实现TCP/IP协议(Transmission ControlProtocol/Internet Protocol,传输控制协议/互联网络协议)的软件,几乎每个现代计算机系统都支持这个协议。因特网的客户端和服务器混合使用套接字接口函数和UnixIO函数来进行通信。套接字函数典型地是作为会陷入内核的系统调用来实现的,并调用各种内核模式的TCP/IP函
原创
352阅读
0评论
3点赞
发布博客于 9 月前

网络基础(一)理解网络及协议

文章目录前言客户端-服务器编程模型从计算机体系结构来理解网络网络的层次结构网络协议理解封装协议分层从每个协议层来介绍数据包封装和分用网络中的地址管理网络字节序前言网络应用随处可见。任何时候你浏览Web、发送E-mail 等,你就正在使用一个网络应用程序。有趣的是,所有的网络应用都是基于相同的基本编程模型,有着相似的整体逻辑结构,并且依赖相同的编程接口。网络应用依赖于很多在系统研究中已经学习过的概念,例如,进程、信号、字节顺序、存储器映射以及动态存储分配,都扮演着重要的角色。还有一些新概念 要掌握。我
原创
200阅读
0评论
3点赞
发布博客于 9 月前

STL string模拟实现及深浅拷贝问题

文章目录深浅拷贝问题现代版写法的String类string 增删查改等实现模拟实现string类,最主要是实现String类的构造、拷贝构造、赋值运算符重载以及析构函数。又因为string是要需要动态管理资源的,模拟实现时就不得不考虑深浅拷贝的问题。深浅拷贝问题浅拷贝:当创建一个对象,然后把它赋给另一个变量的时候,没有拷贝这个对象,而只是拷贝了这个对象的引用,我们称之为浅拷贝。浅拷贝...
原创
171阅读
0评论
2点赞
发布博客于 10 月前

linux --线程(六) 读写锁

文章目录读写者介绍读写锁读写锁接口读写者介绍读者一写者问题是互斥问题的一个概括。一组并发的线程要访问一个共享对象,例如一个主存中的数据结构,或者一个磁盘上的数据库。有些线程只读对象,而其他的线程只修改对象。修改对象的线程叫做写者。只读对象的线程叫做读者。写者必须拥有对对象的独占的访问,而读者可以和无限多个其他的读者共享对象。一般来说,有无限多个并发的读者和写者。读者一写者交互在现实系统中...
原创
608阅读
0评论
2点赞
发布博客于 10 月前

linux --线程(五)线程池模型

文章目录线程池(thread pool)线程池组成部分线程池生产者消费者模式示例线程池(thread pool)一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核的充分利用,还能防止过分调度。可用线程数量应该取决于可用的并发处理器、处理器内...
原创
102阅读
0评论
3点赞
发布博客于 10 月前

linux --线程(四)posix信号量

文章目录信号量介绍posix信号量信号量如何来实现同步与互斥信号量与互斥锁之间的区别信号量介绍之前我们在进程间通信中也讲到过system V 信号量–>《信号量及pv操作》先列出用于同步的三种信号量1.System V信号量(在内核中维护):可用于进程或线程间的同步。2.Posix有名信号量(在内核中维护):使用PosixIPC名字标识(通过特定函数,调用一个绝对文件路径名作为参...
原创
637阅读
0评论
2点赞
发布博客于 10 月前

linux --线程(三)线程同步之条件变量

文章目录线程同步条件变量生产者消费者模型线程同步上一篇文章中我们讲述了如何使用互斥锁来实现线程间数据的共享和通信,但是互斥锁一个明显的缺点是它只有两种状态:锁定和非锁定。而条件变量通过允许线程阻塞和等待另一个线程发送信号的方法弥补了互斥锁的不足,它常和互斥锁一起使用。使用时,条件变量被用来阻塞一个线程,当条件不满足时,线程往往解开相应的互斥锁并等待条件发生变化。一旦其它的某个线程改变了条件变量...
原创
325阅读
3评论
4点赞
发布博客于 10 月前

linux -- 线程(二) 线程安全中的互斥量

文章目录前言再谈可重入与线程安全如何保证线程安全互斥互斥锁互斥量的接口使用死锁前言线程的数据处理: 和进程相比,线程的最大优点之一是数据的共享性,各个进程共享父进程处沿袭的数据段,可以方便的获得、修改数据。但这也给多线程编程带来了许多问题。我们必须当心有多个不同的进程访问相同的变量。许多函数是不可重入的,即同时不能运行一个函数的多个拷贝(除非使用不同的数据段)。在函数中声明的静态变量常常带...
原创
552阅读
2评论
3点赞
发布博客于 10 月前

c++ 泛型编程 初阶

文章目录泛型编程函数模板(function template)函数模板的原理函数模板的实例化模板参数的匹配原则类模板泛型编程还是先谈问题:之前学过的函数重载可以实现一个函数名多用,将实现相同或类似功能的函数用同一个函数名来定义。这样使编程者在调用同类函数时感到含义清楚,方法简单。但是在程序中仍然要分别定义每一个函数,如下三个Max函数的函数体是相同的,只是形参的类型不同,也要分别定义,只...
原创
149阅读
0评论
3点赞
发布博客于 10 月前

linux --线程(一 ) 线程基本概念及线程管理

文章目录线程引言线程特征线程具体概念线程基本概念线程是什么?从内核角度去分析进程与线程的比较总结进程ID和线程ID线程管理线程创建线程ID及进程地址空间布局线程终止线程等待线程分离线程绑定了解线程概念,理解线程与进程区别与联系。线程引言问题:为什么有了进程的概念后,还要再引入线程呢?使用多线程到底有哪些好处?什么的系统应该选用多线程?相比于多进程,多线程是一种非常"节俭"的多任务操作...
原创
478阅读
0评论
4点赞
发布博客于 10 月前

c++ 内存管理

文章目录C/C++内存分布C语言中动态内存管理方式C++中动态内存管理方式operator new与operator delete函数new和delete的实现原理定位new表达式(placement-new)内存泄漏常见面试题C/C++内存分布图示:C语言中动态内存管理方式回顾c语言中的内存分配规则----->c语言动态内存分配C++中动态内存管理方式在C语言中是利用库函数m...
原创
140阅读
0评论
3点赞
发布博客于 10 月前

c++类和对象(下)

文章目录再谈构造函数(处理对象的初始化)构造函数体赋值参数初始化列表explicit关键字static成员静态数据成员特性:静态成员总结友元友元函数友元类再谈构造函数(处理对象的初始化)构造函数体赋值在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值。虽然构造函数调用之后,对象中已经有了一个初始值,但是不能将其称作为类对象成员的初始化,构造函数体中的语句只能将其称作...
原创
144阅读
0评论
4点赞
发布博客于 10 月前

c++ 类和对象(中)类的6个默认成员函数

文章目录构造函数析构函数拷贝构造函数赋值运算符重载取地址及const取地址操作符重载实现一个时间类(对本节知识的运用)问题:如果一个类中什么成员都没有,简称为空类。空类中什么都没有吗?并不是的,任何一个类在我们不写的情况下,都会自动生成下面6个默认成员函数。class Date{};注意:虽然是空类,但是系统会为其分配1个字节来占位。构造函数构造函数是一个特殊的成员函数,名字...
原创
188阅读
0评论
4点赞
发布博客于 11 月前

c++ 类和对象(上)

文章目录类与对象的初步认知类的定义类的信息隐蔽及封装性类的对象大小类成员函数的this指针c语言到c++,必须要先知道的基础知识!请戳下面的文章链接---------------->>>>>点我,开始入门c++类与对象的初步认知C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。C++是基于面向对象的,关注的是对象,将一件...
原创
204阅读
0评论
3点赞
发布博客于 11 月前
linux--进程信号
发布Blink于 1 年前

linux--进程信号

文章目录信号引入信号基本概念信号的分类信号的产生信号的注册与注销注册注销信号处理信号处理的可能情况处理信号的方法信号阻塞信号捕捉(执行自定义处理函数)重入与竞态条件SIGCHLDvolatile关键字进程间通信与线程间通信之间的关系?狭义上的进程间通信其实是指分属于不同进程的线程之间的通讯.而单个进程之间的线程同步问题可归并为一种特殊的进程通信.它要用到内核支持的系统调用来保持线程之间同步....
原创
1287阅读
2评论
3点赞
发布博客于 1 年前

linux--进程间通信(管道与系统V IPC)

文章目录进程间通信目的进程间通信的种类管道管道的实现与本质匿名管道文件描述符属性的设置命名管道System V IPCSystem V 共享内存System V 消息队列System V 信号量进程间通信(IPC,Interprocess communication)是一组编程接口,让程序员能够协调不同的进程,使之能在一个操作系统里同时运行,并相互传递、交换信息。这使得一个程序能够在同一时间里...
原创
1777阅读
1评论
4点赞
发布博客于 1 年前

linux--动态库静态库 、软硬链接

文章目录动态库与静态库概念linux静态库linux动态库软硬链接理解硬链接理解软链接动态库与静态库概念在之前我们学习程序编译的时候,源文件在经过预处理、汇编、编译后生成目标文件,最后一步链接,就是对 之前的声明去实现,合并目标文件、库文件,合并符号表/符号表的重定位,最终生成可执行程序。其中的库文件是什么呢?库通俗的说就是把一些常用的公用函数的目标文件打包在一起制作成的函数库,提供相...
原创
648阅读
0评论
3点赞
发布博客于 1 年前

linux--文件理解及基础IO

文章目录复习C文件与IO相关操作什么是文件文件类型与存储文件缓冲区文件指针常用c文件IO接口及操作系统文件IO文件描述符理解文件描述符的分配规则理解重定向使用 dup2 系统调用文件描述符和文件流指针的关系复习C文件与IO相关操作什么是文件计算机中的文件是以计算机硬盘为载体存储在计算机上的信息集合。文件可以是文本文档、图片、程序等等。但是在程序设计中,我们一般谈的文件有两种:程序文件、数据文...
原创
1014阅读
0评论
4点赞
发布博客于 1 年前

linux--进程控制

文章目录进程创建系统调用 fork进程终止进程等待进程等待必要性获取子进程status进程程序替换替换原理替换函数簇进程控制实例--简单shell的实现往期相关文章--------》深入理解进程进程创建系统调用 fork从已存在进程中创建一个新进程。新进程为子进程,而原进程为父进程。进程调用fork,当控制转移到内核中的fork代码后,内核会做:1.分配新的内存块和内核数据结构(PCB...
原创
1682阅读
0评论
3点赞
发布博客于 1 年前

linux--进程理解

文章目录冯诺依曼体系结构操作系统概念与定位进程概念特征与PCB基本概念:进程特征程序与进程的区别进程的描述-PCB(process control block)通过系统调用创建进程-fork初识进程状态环境变量程序地址空间冯诺依曼体系结构我们常见的计算机,如笔记本。我们不常见的计算机,如大型服务器,大部分都遵守冯诺依曼体系。冯·诺依曼结构也称普林斯顿结构,是一种将程序指令存储器和数据存储器合并...
原创
2126阅读
0评论
4点赞
发布博客于 1 年前

CSDN刚才是崩了吗,有网呀

 
发布Blink于 1 年前

c++ 入门基础

文章目录从c到c++c++对c的扩充c++的输入输出函数重载为什么C语言不支持函数重载内联函数引用基本规则从c到c++书中这么写着:C语言是结构化和模块化的语言,它是面向过程的。在处理较小规模的程序时,程序员用C语言较为得心应手。但是当问题比较复杂、程序的规模比较大时,结构化程序设计方法就显出它的不足。C程序的设计者必须细致地设计程序中的每一个细节,准确地考虑到程序运行时每时刻发 生的事情,...
原创
2420阅读
0评论
4点赞
发布博客于 1 年前

Linux 基础开发工具的使用(yum 、编辑器、编译器、调试器)

文章目录Linux 软件包管理器 yumyum 语法yum常用命令yum注意事项Linux编辑器-vim使用vi/vim 的基本模式vim正常模式中的命令集vim末行模式命令集Linux编译器-gcc/g++使用程序编译过程gcc如何完成函数库概念Linux调试器-gdb使用调试命令Linux 软件包管理器 yum软件包管理工具的作用是提供在操作系统中安装,升级,卸载需要的软件的方法,并提供对...
原创
2383阅读
0评论
3点赞
发布博客于 1 年前
C语言进阶复习(四)--动态内存管理(c重点)
发布Blink于 1 年前
C语言进阶复习(一)--数据在内存的存储
发布Blink于 1 年前

C语言进阶复习(一)--数据在内存的存储

说在前面:学c也过去好久了,有些东西也忘完了,准备复习一下c的重点1.数据在内存的存储2.指针的进阶3.字符串和内存函数4.自定义类型(结构体,联合)5.动态内存管理文章目录前言:计算机是使用二进制存储的。类型的意义数据类型介绍整型数据的存储浮点型在内存中的存储大小端介绍前言:计算机是使用二进制存储的。目前我们使用的计算机主要是采用数字集成电路所搭建。由于数字电路只能表示0和1...
原创
3006阅读
0评论
3点赞
发布博客于 1 年前

C语言进阶复习(五)--程序的编译及宏与函数的分析

文章目录程序的翻译环境和执行环境翻译环境运行环境#define`宏和函数的对比`程序的翻译环境和执行环境在ANSI C的任何一种实现中,存在两个不同的环境。第1种是翻译环境,在这个环境中源代码被转换为可执行的机器指令。第2种是执行环境,它用于实际执行代码。翻译环境一个完整的程序有时候需要多个文件共同组成。编译:组成一个程序的每个源文件通过编译过程分别转换成目标代码(object co...
原创
2619阅读
0评论
2点赞
发布博客于 1 年前

C语言进阶复习(四)--动态内存管理(c重点)

文章目录为什么存在动态内存分配动态内存函数的介绍mallocfreecallocrelloc常见的动态内存错误示范C/C++程序的内存区域划分为什么存在动态内存分配我们已经掌握一般静态内存开辟方式:只要是变量 都会给开辟空间,说白了,变量其实就是地址的名字int val = 20;//在栈空间上开辟四个字节char arr[10] = {0};//在栈空间上开辟10个字节的连续空间但...
原创
1212阅读
0评论
1点赞
发布博客于 1 年前

C语言进阶复习(三)--字符串函数&内存函数专题

此文章重点讲字符串的库函数的使用和注意事项及模拟实现文章目录strlenstrcpy前言:C语言中对字符和字符串的处理很是频繁,但是C语言本身是没有字符串类型的,字符串通常放在常量字符串中或者字符数组中。 字符串常量 适用于那些对它不做修改的字符串函数.strlensize_t strlen ( const char * str );strlen:是专门用来求字...
原创
726阅读
0评论
2点赞
发布博客于 1 年前

C语言进阶复习(二)--指针进阶专题

文章目录指针的概念字符指针指针数组数组指针函数指针函数指针数组回调函数指针的进阶指针的概念不懂指针的可以去看《初阶指针讲解》回顾一下知识指针就是个变量,用来存放地址,地址唯一标识一块内存空间。指针的大小是固定的4/8个字节(32位平台/64位平台)。指针是有类型,指针的类型决定了指针的±整数的步长,指针解引用操作的时候的权限字符指针一般表示一个字符的情况int main()...
原创
2894阅读
0评论
2点赞
发布博客于 1 年前

为什么一直刷到重复的blink?只有我是这个情况?

发布Blink于 1 年前

Linux -基础命令篇(常见指令与权限理解)

ls 指令(ls:List files)语法: ls [选项][目录或文件名]功能:对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息。常用选项:-a 列出目录下的所有文件,包括以 . 开头的隐含文件。-d 将目录象文件一样显示,而不是显示其下的文件。 如:ls –d 指定目录-i 输出文件的 i 节点的索引信息。 如 ls –ai 指定文件-k ...
原创
2174阅读
3评论
4点赞
发布博客于 1 年前

shell以及运行原理简述

文章目录shell概念shell核心操纵执行方式shell概念Shell本身是一个用C编写的程序,它是用户在Unix/Linux之间的桥梁,用户通过Shell完成大部分工作。Shell既是一种命令语言,又是一种编程语言。作为一种命令语言,它交互式地解释和执行用户类型的命令。作为一种编程语言,它定义了各种变量和参数,并提供了在高级语言中可以找到的许多控制结构,包括循环和分支。虽然它不是Unix/...
原创
553阅读
0评论
4点赞
发布博客于 1 年前

Linux & Windows

Linux简介:Linux 内核最初只是由芬兰人林纳斯·托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的。Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 UNIX 的多用户、多任务、支持多线程和多 CPU 的操作系统。Linux 能运行主要的 UNIX 工具软件、应用程序和网络协议。它支持 32 位和 64 位硬件。Li...
原创
236阅读
0评论
3点赞
发布博客于 1 年前
C语言 数据结构与算法
发布Blink于 1 年前

循环队列

循环队列概念:循环队列是队列的一种顺序表示和实现方法。与顺序栈类似,在队列的顺序存储结构中,用一组地址连续的存储单元依次存放从队头到队尾的元素,如一维数组Queue[ MAXSIZE]。此外,由于队列中队头和队尾的位置都是动态变化的,因此需要附设两个指针front和rear,分别指示队头元素和队尾元素在数组中的位置。顺序队列的弊端:显然,在非空顺序队列中,队头指针头元素,而队尾指针始终指向...
原创
488阅读
0评论
3点赞
发布博客于 1 年前

经典排序 插入、希尔、选择、堆排、冒泡、快排、归并

排序的引入当进行数据处理时,经常需要进行查找操作,而为了查的快、找到准,通常要求待处理的数据按关键字大小有序排列,以便采用效率较高的查找方法。排序的基本概念1.排序排序是计算机内经常进行的一种操作,其目的是将一组“无序”的记录序列调整为“有序”的记录序列,通俗的说就是将杂乱无章的数据元素,通过一定的方法按关键字顺序排列的过程叫做排序。2.内部排序和外部排序根据排序时数据所占用存储器的不...
原创
901阅读
0评论
3点赞
发布博客于 1 年前

快速排序 三种版本

快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法,其基本思想为:任取待排序元素序列中的某元素作为基准值,按照该排序码将待排序集合分割成两子序列,左子序列中所有元素均小于基准值,右子序列中所有元素均大于基准值,然后最左右子序列重复该过程,直到所有元素都排列在相应位置上为止。将区间按照基准值划分为左右两半部分的常见方式有:1. 基础版本2. 三数取中法3. 挖坑法4. 前...
原创
796阅读
0评论
5点赞
发布博客于 1 年前

数据结构与算法

1.数据结构的内容1.1先介绍数据结构中的相关术语1.1.1数据数据是描述客观事物的数值、字符以及能输入机器且能被处理的各种符号集合。换句话说,数据就是对客观事物采用计算机能够识别、存储和处理的形式所进行的描述。总之,数据的概念不再是狭义的,数据已由纯粹的数值概念发展成了图像、字符、声音等各种符号。例如,拿C语言的编译程序来说,他加工的数据就是字符流的源程序.c文件,输出的结果是目标程序....
原创
1777阅读
1评论
3点赞
发布博客于 1 年前

c/c++ 运算符与结合性

运算符与结合性运算符 也被称位操作符,适用于在表达式中实现赋值、调用比较和执行算数运算等功能的符号。表达式的求值有三个影响的因素:1. 操作符的优先级2. 操作符的结合性3. 是否控制求值顺序。两个相邻的操作符先执行哪个?取决于他们的优先级。如果两者的优先级相同,取决于他们的结合性。说明:1.同一优先级的运算符,运算次序由结合方向决定。例如:" * “与“ / ”具有相同的优先...
原创
442阅读
0评论
5点赞
发布博客于 1 年前

c++ 命名空间(这一篇就够了)

1.为什么需要命名空间? using namespace std;这句话我们几乎每次在c++程序中看见,这就是使用了命名空间std.命名空间是ANSI C++引入的可以由用户命名的作用域,用来处理程序中常见的命名冲突。在C语言中定义了3个层次的作用城:文件(编译单位)、函数和复合语句,C++又引人了类作用域,类是出现在文件内的。在不同的作用域中可以定义相同名字的变量。互不干扰,便于系统区...
原创
1416阅读
0评论
3点赞
发布博客于 1 年前

堆 适用的TOP K问题

堆这种数据结构的使用场景 TOP k问题:从一堆数据中选出最大或最小的K个数往期堆详解文章1.若是找最大的K个数具体思路:1.需要维护一个k个数据的小堆2.从堆外第一个数据开始与堆顶数据比较,大于堆顶数据时,删除这个小的堆顶,插入这个大一点的数就进入这个堆结构里了,然后维护这个堆3.接着再下一个数据开始重复第二步的比较,直到这堆数据全部都比较完。void PrintTopKMax(i...
原创
1034阅读
0评论
3点赞
发布博客于 1 年前

C语言 堆详解

1.堆的引入之前我们在 二叉树详解文章里谈过二叉树的顺序结构存储方式,普通的二叉树是不适合用数组来存储的,因为可能会存在大量的空间浪费。而完全二叉树更适合使用顺序结构存储。如下图可视:所以我们通常把堆(这特殊的一种二叉树)使用顺序结构的数组来存储,需要注意的是这里的堆和操作系统中虚拟进程地址空间中的堆是两回事,一个是数据结构,一个是操作系统中管理内存的一块区域分段。2.堆的概念及结构概念...
原创
943阅读
1评论
3点赞
发布博客于 1 年前

C语言 二叉树详解

1.二叉树概念及结构概念:一棵二叉树是结点的一个有限集合,该集合或者为空,或者是由一个根节点加上两棵别称为左子树和右子树的二叉树组成。特点:1.二叉树是一种非线性的数据结构,每棵子树的根结点有且只有一个前驱节点(父亲节点)2. 每个结点最多有两棵子树,即二叉树不存在度(度:一个节点含有的子树的个数称为该节点的度)大于2的结点。3. 二叉树的子树有左右之分,其子树的次序不能颠倒。4. ...
原创
956阅读
0评论
3点赞
发布博客于 1 年前

C语言 链栈的基本功能和详细代码(包含注释)

1.栈的概念及结构栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。出栈:栈的删除操作叫做出栈。出数据也在栈顶我们可以把栈想象成手枪子弹弹夹,一颗颗按进去后,先打出来的绝对是最后放进去的那...
原创
532阅读
0评论
3点赞
发布博客于 1 年前

C语言 队列 的基本功能和详细代码(含详细注释)

队列的概念及结构队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出的规则FIFO(First In First Out)入队列:进行插入操作的一端称为队尾出队列:进行删除操作的一端称为队头其实队列换一种说法就是我们文明生活中的 排队问题,不管干什么一般总是遵守先来后到的,就是先来的(对头)先获取到资源,后来的不准插队,只能在最后面(队尾)排队等待。...
原创
276阅读
0评论
3点赞
发布博客于 1 年前

C语言 顺序表和链表的区别与总结

顺序表和链表的区别和联系顺序表特点:空间连续、支持随机访问缺点1. 中间/头部的插入删除,时间复杂度为O(N)2. 增容需要申请新空间,拷贝数据,释放旧空间。会有不小的消耗。3. 增容一般是呈2倍的增长,势必会有一定的空间浪费。例如当前容量为100,满了以后增容到200,我们再继续插入了5个数据,后面没有数据插入了,那么就浪费了95个数据空间。而链表的结构就正好解决了这些问题链表...
原创
895阅读
0评论
3点赞
发布博客于 2 年前

C语言 带头双向循环链表的增删查改功能实现

这里要注意有个头结点,且有前后指针才可以实现循环,写功能时思路必须要清晰。头文件 功能定义// 带头+双向+循环链表增删查改实现#pragma once#include <stdio.h>#include <stdlib.h>#include <assert.h>typedef int LTDataType;typedef struct L...
原创
544阅读
0评论
3点赞
发布博客于 2 年前

C语言 单链表的增删查改功能实现

概念:链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的 。无头单向非循环链表(单链表):结构简单,一般不会单独用来存数据。实际中更多是作为其他数据结构的子结构,如哈希桶、图的邻接表等等。头文件 功能定义#pragma once#include <stdio.h>#include <stdlib.h>#inc...
原创
521阅读
0评论
3点赞
发布博客于 2 年前

C语言 顺序表的增删查改基本功能的实现

顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。顺序表一般可以分为:静态顺序表:使用定长数组存储。动态顺序表:使用动态开辟的数组存储。// 顺序表的静态存储#define N 100typedef int SLDataType;typedef struct SeqList{ SLDataType array[...
原创
501阅读
0评论
1点赞
发布博客于 2 年前
100 个网络基础知识普及,看完成半个网络高手
发布Blink于 2 年前

【C语言】自定义类型 结构体 枚举 联合

结构体的基础知识结构体是一些值的集合,这些值称为成员变量。结构体的每个成员可以是不同类型的变量。结构体的声明定义一个学生的结构体struct Stu{ char name[20];//名字 int age;//年龄 char sex[5];//性别 char id[20];//学号};//分号不能丢struct Stu s = {"zhangsan", 20,"man",1...
原创
239阅读
0评论
3点赞
发布博客于 2 年前

时间复杂度_空间复杂度理解

时间复杂度_空间复杂度理解1.算法效率2.时间复杂度3.空间复杂度1.算法效率算法效率分析分为两种:第一种是时间效率,第二种是空间效率。时间效率被称为时间复杂度,而空间效率被称作空间复杂度。 时间复杂度主要衡量的是一个算法的运行速度,而空间复杂度主要衡量一个算法所需要的额外空间,在计算机发展的早期,计算机的存储容量很小。所以对空间复杂度很是在乎。但是经过计算机行业的迅速发展,计算机...
原创
897阅读
0评论
2点赞
发布博客于 2 年前

【C语言】判断一个字符串是否为另一个字符串旋转后的

判断一个字符串是否为另一个字符串旋转后的//int is_rotate_str(char* str, char* rt_str)//{// int len = strlen(str);// char* double_str = (char*)malloc(len * 2 + 1);// strcpy(double_str, str);// strcat(double_str, str...
原创
217阅读
0评论
3点赞
发布博客于 2 年前

【C语言】左旋字符串 两种解法

左旋字符串(一般解法)#include <stdio.h>#include <string.h>#include <assert.h>#include <stdlib.h>//void rotate_left(char* str, int k)//{// assert(str);//// while (k--)//控制旋转次数/...
原创
226阅读
0评论
3点赞
发布博客于 2 年前

【C语言】strncpy,strncat,strncmp指定具体几个字符单位来操作的字符串函数

strncpy,strncat,strncmp指定具体几个字符单位来操作的字符串函数#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<string.h>#include<assert.h>//strncpy 指定几个字节的字符拷贝char* my_strncpy(char* dst,...
原创
437阅读
0评论
3点赞
发布博客于 2 年前

C语言strlen.strcpy.strcmp.strstr.memcpy.memove 字符串函数和内存函数的模拟实现

strlen.strcpy.strcmp.strstr.memcpy.memove五个函数的模拟实现#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<string.h>#include <stdio.h>#include <string.h>#include <as...
原创
212阅读
0评论
2点赞
发布博客于 2 年前

c语言 进阶 strlen函数的三种实现

C语言中自己实现的strlen函数,三种方法strlen函数介绍size_t strlen ( const char * str );1.字符串已经 ‘\0’ 作为结束标志,strlen函数返回的是在字符串中 ‘\0’ 前面出现的字符个数(不包含 ‘\0’ )。2.参数指向的字符串必须要以 ‘\0’ 结束。3.注意函数的返回值为size_t,是无符号的( 易错 )4.学会strlen...
原创
502阅读
0评论
3点赞
发布博客于 2 年前

C语言 数组名的意义 以及sizeof与strlen对数组类型的解析

`**数组名的意义:**1. sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组的大小。2. &数组名,这里的数组名表示整个数组,取出的是整个数组的地址。3. 除此之外所有的数组名都表示首元素的地址arr与&arr的了解与区分arr是数组名,数组名表示数组首元素的地址。&arr 表示的是数组的地址,而不是数组首元素的地址。(虽然值是一样的)...
原创
801阅读
0评论
3点赞
发布博客于 2 年前

【C语言】 指针与数组和函数的组合

什么是指针?指针就是个变量,用来存放地址,地址唯一标识一块内存空间。指针的大小是固定的4/8个字节(32位平台/64位平台)。指针是有类型,指针的类型决定了指针+ -整数运算的步长,指针解引用操作的时候的权限。指针的类别区分//一定要注意 [ ]和()与*的操作符优先级,[ ]和()的优先级要高于*号的,明白这个就好区分和使用指针与数组和函数的结合问题字符指针在指针的类型中我们...
原创
280阅读
0评论
5点赞
发布博客于 2 年前

C语言 传参问题

**函数传参必定要形成临时变量*传参又分为传值传参和传址传参传值传参:形参对实参值的临时拷贝,实质上只是发生交换的只是这个临时变量,实参值并没有变化传址传参:形参指针指向实参的地址,传地址后,解引用后交换地址里的内容,实参完成了交换//传值传参int swap(int x, int y){ int tmp = 0; tmp = x; x = y; y = tmp;}...
原创
241阅读
0评论
2点赞
发布博客于 2 年前

C语言 初阶指针

指针是什么?在计算机科学中,指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为“指针”。意思是通过它能找到以它为地址。举个例子:一栋宿舍里的门牌号就可以联想成指针,一个宿舍对应一个门牌号,并且门牌号是连续相邻的,如果我们想知道某个学生...
原创
214阅读
0评论
3点赞
发布博客于 2 年前

C语言的表达式求值问题(整型提升)

表达式求值表达式求值的顺序一部分是由操作符的优先级和结合性决定。同样,有些表达式的操作数在求值的过程中可能需要转换为其他类型。隐式类型转换C的整型算术运算总是至少以缺省整型类型的精度来进行的。为了获得这个精度,表达式中的字符和短整型操作数在使用之前被转换为普通整型,这种转换称为整型提升。(为什么要整型提升?)整型提升的意义:表达式的整型运算要在CPU的相应运算器件内执行,CPU内整型...
原创
230阅读
0评论
1点赞
发布博客于 2 年前

c语言 位操作符和逻辑操作符

位操作符& 按位与| 按位或^ 按位异或注:他们的操作数必须是整数。& 两个整数比特位有假(0)就为假(0),只有全为真(1)就为真(1)举个例子:老师叫两个学生来办公室,说张三与(&)李四过来,如果只一个人过去就不满足老师说的话(为假),必须两个人都过去(为真)。| 两个整数比特位只要有真就为真,只有全为假(0)就为假(0)举个例子:老师叫两个学生来...
原创
541阅读
0评论
2点赞
发布博客于 2 年前

C语言 调整数组使奇数全部都位于偶数前面 杨氏矩阵

1.调整数组使奇数全部都位于偶数前面。输入一个整数数组,实现一个函数,来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分。//杨氏矩阵有一个二维数组.数组的每行从左到右是递增的,每列从上到下是递增的.在这样的数组中查找一个数字是否存在。时间复杂度小于O(N);...
原创
182阅读
0评论
2点赞
发布博客于 2 年前

c语言进阶学习 第一节学习总结

#c进阶学习第一节###数据在内存中的存储1.数据类型介绍整型:字符类型char 短整型short 整型int 长整型long浮点型:单精度浮点型float 双精度浮点型double构造类型:数组 结构体 枚举 联合(共用体)指针类型:int* pi ; char* pc ; float* pf; viod* pv;空类型:表示无类型(空类型)2.--...
原创
328阅读
4评论
2点赞
发布博客于 2 年前

C语言 三子棋小游戏

三子棋这是主函数和菜单#define _CRT_SECURE_NO_WARNINGS 1#include"game.h"void menu(){ printf("********0.exit********
"); printf("********1.play********
"); printf("**********************
");}void g...
原创
128阅读
0评论
4点赞
发布博客于 2 年前

null 道阻且长

20190916 我的第一篇博客作为一个已经在大学虚度了两年的编程菜鸟,今后准备开始好好努力,以后每周不定时我都会在我的博客上分享我所写过的各种编程题目和我所了解的新的知识点,欢迎编程大佬指正。作为一名普普通通的90后青年,我积极乐观向上,并且热爱游戏,这也是我学习编程的动力之一,尤其对,网易,腾讯等,更是有着倾佩之心,期望成为其中的一员。(加油,路还很长!)华为,小米等这种业界的大佬级公司,...
原创
694阅读
4评论
5点赞
发布博客于 2 年前