
c语言
文章平均质量分 51
love_in_code
IT爱好者
展开
-
深拷贝与浅拷贝
浅拷贝就是成员数据之间的一一赋值:把值一一赋给要拷贝的值。但是可能会有这样的情况:对象还包含资源,这里的资源可以是堆资源,或者一个文件。当值拷贝的时候,两个对象就有用共同的资源,同时对资源可以访问,这样就会出问题。深拷贝就是用来解决这样的问题的,它把资源也赋值一次,使对象拥有不同的资源,但资源的内容是一样的。对于堆资源来说,就是在开辟一片堆内存,把原来的内容拷贝。 如果你原创 2015-11-29 20:53:54 · 375 阅读 · 0 评论 -
cache与buffer的区别联系
很多时候,我们将cache与buffer混为一谈,实际上他们完全不同。Cache:缓存区,是高速缓存,是位于CPU和主内存之间的容量较小但速度很快的存储器,因为CPU的速度远远高于主内存的速度,CPU从内存中读取数据需等待很长的时间,而 Cache保存着CPU刚用过的数据或循环使用的部分数据,这时从Cache中读取数据会更快,减少了CPU等待的时间,提高了系统的性能。Cache并不是缓存文件的,原创 2016-09-27 09:52:10 · 313 阅读 · 0 评论 -
为何说TCP是可靠连接而UDP是不可靠连接
首先看一下TCP协议的报头: 而UDP协议的报头大概如下: 可以很明显的看出来,TCP的报头多了好多项,顺序号、应答号等等。 在TCP协议中使用了接收确认和重传机制。这样每一次信息的传输都经过了像三次握手那样的一个过程,使得每一个信息都能保证到达,是可靠的。 而UDP是尽力传送,没有应答和重传机原创 2016-04-21 17:52:02 · 5821 阅读 · 0 评论 -
归并排序(合并排序)
合并排序(MERGE SORT)是又一类不同的排序方法,合并的含义就是将两个或两个以上的有序数据序列合并成一个新的有序数据序列,因此它又叫归并算法。它的基本思想就是假设数组A有N个元素,那么可以看成数组A是又N个有序的子序列组成,每个子序列的长度为1,然后再两两合并,得到了一个 N/2 个长度为2或1的有序子序列,再两两合并,如此重复,值得得到一个长度为N的有序数据序列为止,这种排序方法称为2—路原创 2016-03-27 21:52:42 · 4770 阅读 · 1 评论 -
素数快速求法
素数指的是只能被1和自身整除的的数。那么如何求解出N以内的所有素数呢?1、暴力解决 遍历两次2、优化暴力 内层遍历只需遍历到N的开方 因为一个合数能被整除a*b = N,那么a和b必然有一个是小于N的开方的。所以要是合数的话,遍历到N开方前就会被除开,证明为合数。3、以上还是不够快,所以使用筛选法,即2的倍数,3的倍数.....都要不是素数,直接删除 1 #include原创 2016-03-02 15:26:59 · 1420 阅读 · 0 评论 -
大数乘法
用数组做了一个大数乘法的算法,很粗糙,但很实用 1 #include 2 #define MAX 100 3 4 void my_mulity(char *buf1, char *buf2); 5 6 void my_mulity(char *buf1, char *buf2) 7 { 8 int len1 = 0; 9原创 2016-03-19 22:17:39 · 317 阅读 · 0 评论 -
c/c++静态区 常量区 栈 堆
一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 堆(heap):由malloc,new等分配的空间的地址,地址由低向高增长(程序员释放)。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。转载 2016-03-03 16:23:48 · 403 阅读 · 0 评论 -
exit()使用
注:exit()就是退出,传入的参数是程序退出时的状态码,0表示正常退出,其他表示非正常退出,一般都用-1或者1,标准C里有EXIT_SUCCESS和EXIT_FAILURE两个宏,用exit(EXIT_SUCCESS);可读性比较好一点。作为系统调用而言,_exit和exit是一对孪生兄弟,它们究竟相似到什么程度,我们可以从Linux的源码中找到答案:#d转载 2016-03-03 15:55:51 · 1131 阅读 · 0 评论 -
static关键字使用方法
static关键字使用方法:1.static修饰变量 静态全局变量:静态全局变量与普通全局变量的区别: ①二者都先于主函数创建 ②声明周期贯穿整个程序③都存在与内存的静态区 ④普通全局变量可以被外部.c文件识别;静态全局变量不可以,只能被本文件使用静态局部变量:存在于内存的静态区。在函数内定义,函数调用完后不被释放,下次仍然可以使原创 2016-03-03 15:12:56 · 287 阅读 · 0 评论 -
树与二叉树的一些概念
1.树中的一些基本概念总结:1)祖先/子孙:从树中的一个指定结点x到根结点r的唯一路径上的所有结点都是x的祖先;x为它们的子孙。注:每个结点都是自己本身的祖先和子孙。2)真祖先/真子孙:根据1)中的定义,除了自己外,就有了真祖先/真子孙的概念。3)父结点/子结点:从根结点到指定的x结点唯一路径中最后一条边是(y,x),则y是x的父结点,x是y的子结点。4)兄原创 2016-01-08 21:58:40 · 2074 阅读 · 0 评论 -
指针数组与数组指针的区别
区分指针数组与数组指针: 指针数组:array of pointers,即用于存储指针的数组,也就是数组元素都是指针 数组指针:a pointer to an array,即指向数组的指针还要注意的是他们用法的区别,下面举例说明。int* a[4] 指针数组 表示:数组a中的元素都为int型指针原创 2016-01-07 14:22:35 · 391 阅读 · 0 评论 -
库函数与系统调用的联系与区别
一. 概念系统调用(英语:system call),指运行在用户空间的应用程序向操作系统内核请求某些服务的调用过程。 系统调用提供了用户程序与操作系统之间的接口。一般来说,系统调用都在内核态执行。由于系统调用不考虑平台差异性,由内核直接提供,因而移植性较差(几乎无移植性)。库函数(library function),是由用户或组织自己开发的,具有一定功能的函数集合,一般具有较好转载 2016-01-06 22:30:55 · 8394 阅读 · 0 评论 -
c语言中的#号和##号的作用
一、一般用法 我们使用#把宏参数变为一个字符串,用##把两个宏参数贴合在一起. 用法: #i nclude #i nclude using namespace std; #define STR(s) #s #define CONS(a,b) int(a##e##b) int main() { printf(STR(vck));转载 2016-01-05 23:08:06 · 2185 阅读 · 0 评论 -
linux 下用 man 命令不能查阅标准库函数的解决方案
最近新装的虚拟机,centos6.6然后在上面编程的时候,发现man标准库函数没法完成解析,一直报错[root@liu manpages-zh-1.5.1]# man strstr Cannot open the message catalog "man" for locale "zh_CN.UTF-8" (NLSPATH="/usr/share/locale/%l/LC_MESSAGES/%N原创 2016-11-09 10:26:44 · 4414 阅读 · 1 评论