qq_40395404
码龄7年
关注
提问 私信
  • 博客:70,448
    70,448
    总访问量
  • 56
    原创
  • 686,312
    排名
  • 30
    粉丝
  • 0
    铁粉
IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:北京市
  • 加入CSDN时间: 2017-09-26
博客简介:

qq_40395404的博客

查看详细资料
个人成就
  • 获得29次点赞
  • 内容获得0次评论
  • 获得86次收藏
创作历程
  • 14篇
    2018年
  • 42篇
    2017年
成就勋章
TA的专栏
  • C语言
    24篇
  • 数据结构
    10篇
  • linux
    18篇
  • c++
    5篇
  • 网络
创作活动更多

如何做好一份技术文档?

无论你是技术大神还是初涉此领域的新手,都欢迎分享你的宝贵经验、独到见解与创新方法,为技术传播之路点亮明灯!

180人参与 去创作
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

二叉树

定义:二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有左右之分,次序不能颠倒。二叉树的第i层至多有2^(i-1)个结点;深度为k的二叉树至多有2^k-1个结点;对任何一棵二叉树T,如果其终端结点数为n0,度为2的结点数为n2,则n0=n2+1深度=层数-1 定义树的结构:typedef struct BtNode{ BtNode* le...
原创
发布博客 2018.09.06 ·
249 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏

递归

递归就是调用自身eg1:打印函数//递归void printArr1(int *arr,int len){ if(arr==NULL || len<1) return; printArr1(arr,len-1); printf("%d ",arr[len-1]);}//非递归void printArr(int* arr,int len){ if(arr==...
原创
发布博客 2018.09.06 ·
213 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏

STL容器迭代器失效原则

vector内部数据结构:数组(一段连续内存空间)插入操作:1. 插入(push_back/insert)操作在vector中加入新的元素,但vector中元素总数仍不大于capacity,这时插入位置后的元素都被依次移动到下一个位置,所以插入位置之后的迭代器都会失效。2. 插入(push_back/insert)操作在vector中加入新的元素,但vector中元素总数大于capacit...
原创
发布博客 2018.09.04 ·
362 阅读 ·
1 点赞 ·
0 评论 ·
1 收藏

c++类型转换

1 reinterpret_cast‘reinterpret_cast’转换一个指针为其它类型的指针。它也允许从一个指针转换为整数类型。反之亦然。(译注:是指针具体的地址值作为整数值?)这个操作符能够在非相关的类型之间转换。操作结果只是简单的从一个指针到别的指针的值的二进制拷贝。在类型之间指向的内容不做任何类型的检查和转换。如果情况是从一个指针到整型的拷贝,内容的解释是系统相关的,所以任...
原创
发布博客 2018.09.04 ·
148 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

设计模式——监听者观察者模式

监听器模式:事件源经过事件的封装传给监听器,当事件源触发事件后,监听器接收到事件对象可以回调事件的方法观察者模式:观察者(Observer)相当于事件监听者,被观察者(Observable)相当于事件源和事件,执行逻辑时通知observer即可触发oberver的update,同时可传被观察者和参数观察者模式有时被称作发布/订阅模式,观察者模式定义了一种一对多的依赖关系,让多个观察者对象同...
原创
发布博客 2018.08.24 ·
309 阅读 ·
1 点赞 ·
0 评论 ·
1 收藏

STL标准模板库

容器:  1、顺序容器:是一种各元素之间有顺序关系的线性表,是一种线性结构的可序群集。顺序性容器中的每个元素均有固定的位置,除非用删除或插入的操作改变这个位置。顺序容器的元素排列次序与元素值无关,而是由元素添加到容器里的次序决定。顺序容器包括:vector(向量)  -》数量成倍增长的一维数组    push_back   insert   pop_back优点:随机访问,快速查找...
原创
发布博客 2018.08.23 ·
281 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

指针的易错点

内存泄漏:在c/c++中,内存管理器不会帮你自动回收不再使用的内存。如果你忘记了释放不再使用的内存,这些内存就不能被重用了,造成内存泄漏。 内存越界访问:读越界:即读了不属于自己的数据。如果所读地址无效,程序立即崩溃;如果所读地址有效,在读的时候不会马上出现问题,但由于读到的数据是随机的,因此也会造成不可预料的后果。写越界:又叫缓冲区越界,所写入的数据对别的程序来说是随机的,他...
原创
发布博客 2018.07.19 ·
274 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

字符串拷贝和内存拷贝的区别

strcpy与memcpy区别:1、复制的内容不同。strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、整型、结构体、类等。2、复制的方法不同。strcpy不需要指定长度,它遇到被复制字符的串结束符"\0"才结束,所以容易溢出。memcpy则是根据其第3个参数决定复制的长度。3、用途不同。通常在复制字符串时用strcpy,而需要复制其他类型数据时则一般用memcpy...
原创
发布博客 2018.07.18 ·
1200 阅读 ·
0 点赞 ·
0 评论 ·
6 收藏

dup和dup2函数

dup和dup2,它们的作用都是用来复制一个文件的描述符。它们经常用来重定向进程的stdin、stdout和stderr这两个函数的原形如下:dup()函数利用函数dup,我们可以复制一个描述符。传给该函数一个既有的描述符,它就会返回一个新的描述符,这个新的描述符是传给它的描述符的拷贝。这意味着,这两个描述符共享同一个数据结构。例如,如果我们对一个文件描述符执行lseek操作,得到的第一个文件的位...
原创
发布博客 2018.04.14 ·
274 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

socket 编程——并发服务器

一般的面向连接服务器程序的代码框架: 并发服务器的一般模型:eg:大写字符串转小写字符串(可并发执行)〈通过fork实现〉ser.c:#include<stdio.h>#include<stdlib.h>#include<ctype.h>#include<sys/socket.h>#include<arpa/inet.h>#in...
原创
发布博客 2018.04.12 ·
293 阅读 ·
0 点赞 ·
0 评论 ·
2 收藏

线程

线程是程序中一个单一的顺序控制流程。进程内有一个相对独立的、可调度的执行单元,是系统独立调度和分派CPU的基本单位指令运行时的程序的调度单位。在单个程序中同时运行多个线程完成不同的工作,称为多线程对线程的操作:因为线程不属于系统调用,因此需要用到pthread.h库1.创建线程#include <pthread.h>int pthread_create(pthread_t *thre...
原创
发布博客 2018.03.30 ·
236 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

什么是进程,什么是线程,什么时候用进程,什么时候用线程

什么是进程什么是线程?进程是指在系统中正在运行的一个应用程序;程序一旦运行就是进程进程可以认为是程序执行时的一个实例。进程是系统进行资源分配的独立实体, 且每个进程拥有独立的地址空间。一个进程无法直接访问另一个进程的变量和数据结构, 如果希望让一个进程访问另一个进程的资源,需要使用进程间通信,比如:管道,文件, 套接字等。一个进程可以拥有多个线程,每个线程使用其所属进程的栈空间。 线程与进程的一个...
原创
发布博客 2018.03.30 ·
12945 阅读 ·
17 点赞 ·
0 评论 ·
73 收藏

C和 C ++ 的区别

1.内联函数: 在函数的调用点,把函数的代码全部展开,编译阶段(一种更安全(进行类型检查)宏)宏: 预编译阶段(字符串替换,不进行类型检查,无法调式)内联函数和普通函数的区别:内联函数没有标准的函数栈帧的开辟和回退普通函数:函数调用的开销大于函数执行的开销->写成内联函数内联函数本文件可见(不产生符号),一般写在头文件中内联函数和static函数的区别:本文件...
原创
发布博客 2018.02.05 ·
2485 阅读 ·
0 点赞 ·
0 评论 ·
10 收藏

对文件操作详解

C语言中没有输入输出语句,所有的输入输出功能都用 ANSI C提供的一组标准库函数来实现。文件操作标准库函数有:文件的打开操作 fopen打开一个文件文件的关闭操作fclose 关闭一个文件文件的读写操作:fgetc 从文件中读取一个字符fputc 写一个字符到文件中去fgets 从文件中读取一个字符串fputs 写一个字符串到文件中去fprintf
原创
发布博客 2018.02.05 ·
863 阅读 ·
1 点赞 ·
0 评论 ·
13 收藏

网络编程

tcp服务器和客户端的编程流程:eg:时间/日期客户程序:                                   时间/日期服务端程序:**********************************************************************************套接字就是一个接口(本质是文件)一、套接字的属性域(domain)、类型(type)和...
原创
发布博客 2017.12.07 ·
227 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Linux文件操作

Linux系统调用和库函数调用的区别:1、系统调用系统调用提供的函数如open, close, read, write, ioctl等,需包含头文件unistd.h。系统调用通常用于底层文件访问(low-level file access),例如在驱动程序中对设备文件的直接访问。系统调用是操作系统相关的,因此一般没有跨操作系统的可移植性。系统调用发生在内核空间,因此如果在用户空间的一般应用程序中使...
原创
发布博客 2017.12.07 ·
349 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

共享内存

一、共享内存的定义共享内存就是允许两个不相关的进程访问同一个逻辑内存。共享内存是在两个正在运行的进程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常安排为同一段物理内存。进程可以将同一段共享内存连接到它们自己的地址空间中,所有进程都可以访问共享内存中的地址,就好像它们是由用C语言函数malloc分配的内存一样。而如果某个进程向共享内存写入数据,所做的改动将立即影响到可以访问同一段...
原创
发布博客 2017.11.28 ·
293 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

信号量

信号量定义 :特殊的变量,只能+1(v),-1(p),都是原子操作(不打断能被)。最简单的信号量是一个只有0与1两个值的变量,二值信号量。这是最为通常的形式。具有多个正数值的信号量被称之为通用信号量。信号量的作用:通知系统产生了某种事件Signal:改变对当前信号的响应方式(默认,忽略,自定义)子进程状态发生改变,发送给父进程(子进程结束了,会给父进程发送)Kill(pid_t pid,int s...
原创
发布博客 2017.11.28 ·
1900 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

进程与信号

信号:Linux响应条件而产生的一个事件。接收到该信号的进程会相应地采取一些行动信号是由某些错误条件而生成的。如内存段冲突,浮点处理器错误或非法指令等等。它们由shell和终端处理器生成来引起中断,它们还可以作为在进程间通信或修改行为的一种方式,明确有一个进程发送给另一个进程。信号可以被生成、捕获、响应或忽略在signal.h中定义,以SIG开头其他信号:给当前进程发送si
原创
发布博客 2017.11.28 ·
246 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

管道

引入管道的原因:普通文件存储在磁盘中,读写效率低管道文件存储在内存中,读写效率高 管道:其实是在两个进程之间实现一个数据流通的管道,单向或双向。优点:简单易用缺点:功能简单,有诸多限制 管道分为有名管道和无名管道。无名管道用于父子进程、兄弟进程之间的通信。无名管道是存在内存上的文件,进程对每一个已打开文件的操作都是通过一个file数据结构进行的,只有在同一个...
原创
发布博客 2017.11.27 ·
277 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏
加载更多