摘要:CMake 说明 cmake的定义是什么 ? 高级编译配置工具 当多个人用不同的语言或者编译器开发一个项目,最终要输出一个可执行文件或者共享库(dll,so等等)这时候神器就出现了 CMake! 所有操作都是通过编译CMakeLists.txt来完成的—简单 官 方网站是 www.cmake.org
阅读全文
摘要:文章核心思想是: #要清晰明白EPOLL为什么性能好。 #####本文会从网卡接收数据的流程讲起,串联起CPU中断、操作系统进程调度等知识;再一步步分析阻塞接收数据、select到epoll的进化过程;最后探究epoll的实现细节。 ##一、从网卡接收数据说起 #####下图是一个典型的计算机结构图
阅读全文
摘要:首先需要说明的是,计算机中生成的随机数严格来说都是伪随机,即非真正的随机数,真正随机数的随机样本不可重现。那么我们来看看代码中有哪些方式可以生成随机数。 rand rand函数声明如下: rand函数返回[0,RAND_MAX)范围的随机整数,在我的机器上,RAND_MAX为2147483647。
阅读全文
摘要:看下面代码, 输出结果是多少呢? 这里很容易让人以为先用3对j进行初始化,然后j再对i进行初始化,那么i和j都是3。实施缺相反,初始化列表的初始化顺序与变量声明的顺序一致。也就是说,j先对i初始化,然后2再对j初始化。 故输出内容
阅读全文
摘要:单例模式看起来简单,但是需要考虑的问题却很多。 在软件系统中,经常有这样一些特殊的类,必须保证他们在系统中只存在一个实例,才能确保它们的逻辑正确性、以及良好的效率。 所以得考虑如何绕过常规的构造器(不允许使用者new出一个对象),提供一种机制来保证一个类只有一个实例。 应用场景: Windows的T
阅读全文
摘要:我们都知道,一般使用printf的打印都会直接打印在终端,如果想要保存在文件里呢?我想你可能想到的是重定向。例如: 这样printf的输出就存储在result.txt中了。 当然了,如果你既想打印在终端,又想保存在文件,还可以使用tee命令: 注:program为你运行的程序。 不过文本介绍了不是通
阅读全文
摘要:前言 我们可能听过C语言中的传值和传指针,在其他语言中,也有传引用一说,那么他们到底有什么区别呢?如果你还不能准确地分辨,就该好好了解一下了。 传值 我们在初学C语言的时候就被老师教过,下面的方式是无法交换a和b的值的: 运行结果如下: 可以看到,a和b的值最终并没有被交换。开始时a,b的值为10,
阅读全文
摘要:通信协议中的数据传输、数组的存储方式、数据的强制转换等这些都会牵涉到大小端问题。 CPU的大端和小端模式很多地方都会用到,但还是有许多朋友不知道,今天暂且普及一下。 一、为什么会有大小端模式之分呢? 因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8bit。 但是在
阅读全文
摘要:请看题: 问题很简单,就问会输出什么?无非就这几个答案:1,0,报错,随机数。那究竟是多少呢?当然我们先声明实际工作中很少有人会这么写,我们主要是借用此题给大家讲一些C的知识,其实本题主要涉及的知识点是全局变量和局部变量的问题,也就是变量作用域的问题。 首先进行简单分析:一开始声明全局变量a并赋值,
阅读全文
摘要:前言 在C语言中,数组和指针似乎总是“暧昧不清”,有时候很容易把它们混淆。本文就来理一理数组和指针之间到底有哪些异同。 数组回顾 在分析之前,我们不妨回顾一下数组的知识。数组是可以存储一个固定大小的相同类型元素的顺序集合。为了便于我们说明,假设有以下数组声明: 数组大小必须在编译期就作为一个常数确定
阅读全文
摘要:八大排序是《数据结构》这门大学计算机必修课中非常基础但是特别重要的知识点 常见的八大排序,他们之间关系如下: 一、直接插入排序(Insertion Sort) 直接插入排序的核心思想就是:将数组中的所有元素依次跟前面已经排好的元素相比较,如果选择的元素比已排序的元素小,则交换,直到全部元素都比较过
阅读全文
摘要:冒泡排序 冒泡排序算法又称交换排序算法,是从观察水中气泡变化构思而成,原理是从第一个元素开始比较相邻元素的大小,若大小顺序有误,则对调后再进行下一个元素的比较,就仿佛气泡逐渐从水底逐渐冒升到水面一样。如此扫描一次之后就可以确保最后一个元素位于正确的位置。接着再逐步进行第二次扫描,直到完成所有元素的排
阅读全文
摘要:一、悬空指针 C语言中的指针可以指向一块内存,如果这块内存稍后被操作系统回收(被释放),但是指针仍然指向这块内存,那么,此时该指针就是“悬空指针”。下面这段C语言代码是一个例子,请看: C语言中的“悬空指针”会引发不可预知的错误,而且这种错误一旦发生,很难定位。这是因为在 free(p) 之后,p
阅读全文
摘要:前几天,在论坛看到有统计说90%的程序员不能写对简单的二分法。二分法不是很简单的吗? 其实,二分法真的不是那么简单,尤其是二分法的各个变种。最最简单的二分法,就是从一个排好序的数组之查找一个key值。如下面程序 3.查找第一个等于或者大于Key的元素 4. 查找第一个大于key的元素 4. 查找最后
阅读全文
摘要:结构体 结构体是一种新的数据类型,对C语言的数据类型进行了极大的扩充。 1、可以通过a.age对其进行取成员的操作,b age也可以进行结构体的操作,b age存在问题,必须有一个结构体空间已经让b指向,b的值为此结构体空间的地址。 2、a.name = "lilei"; false,因为name是
阅读全文
摘要:1.数组与指针的区别 数组下标运算实际上都是通过指针进行的。 数组名代表着指向该数组中下标为0的元素的指针,但有例外:sizeof(数组名)返回整个数组的大小,而非指针大小;&数组名返回一个指向数组的指针,而不是指向该数组中下标为0的元素的指针的指针。 数组名作为参数时,数组名会被转换成指向该数组下
阅读全文
摘要:1. static关键字的作用 (1)全局静态变量 在全局变量前面加上关键字static, 全局变量就定义为一个全局静态变量 在静态存储区,在整个程序运行期间一致存在。 初始化:未初始化的全局静态变量会被自动初始化为0(自动对象的值是任意的,除非他被显示初始化) 作用域:全局静态变量在声明他的文件之
阅读全文