C
文章平均质量分 67
周大侠
这个作者很懒,什么都没留下…
展开
-
gcc下使用数学公式
发现gcc下使用数学公式比如include后,使用如pow的幂函数,编译时仍然会出现undefined reference to 'pow'这是由于#include只是包含了要使用的数学函数库的头文件,其中仅仅包含了相关数学函数的声明,其真正的函数体以库的形式封装起来了,所以在链接的时候需要将该库链接进来,即-lm就可以了!所以 gcc -lm *.ch原创 2015-03-03 19:04:26 · 734 阅读 · 0 评论 -
C语言 字节对齐
字节对齐的目的是使CPU能对变量进行快速访问。 字节对齐,对于标准数据类型,它的地址只要是它的长度的整数倍就可以了。对于非标准数据类型按照下面的原则对齐数组 :按照基本数据类型对齐,第一个对齐了后面的自然也就对齐了。 联合 :按其包含的长度最大的数据类型对齐。 结构体: 结构体中每个数据类型都要对齐。举例说明例1struct test { char x1; short x2; fl原创 2015-08-21 17:10:59 · 460 阅读 · 0 评论 -
数组及多维数组
c++中没有多维数组的概念,多维数组就是数组的数组。按照从内向外的阅读顺序有助于更好地理解其真实含义。在c++11中增加了范围for的使用二重for来处理二维数组size_t cnt=0;int ia[r][c];for(size_t i=0; i!=r; ++i) for(size_t j=0; j!=c; ++j){ ia[i][j]=cnt; ++c原创 2015-08-23 17:31:11 · 393 阅读 · 0 评论 -
new malloc(待更新)
1、new是运算符(C++),malloc是函数(c++/c) 2、new 返回指定类型的指针,并且可以自动计算所需要大小 malloc 则必须要由我们计算字节数,并且在返回后强行转换为实际类型的指针。 3、malloc 只管分配内存,并不能对所得的内存进行初始化,所以得到的一片新内存中,其值将是随机的。 new 可以使用构造函数初始化对象。深层次的内容待讨论原创 2015-07-24 19:10:28 · 296 阅读 · 0 评论 -
引用 指针的区别
简单来说 1. 引用不能为空,指针可以为空。 定义一个引用一定要初始化。 使用指针之前必须做判空操作,而引用不必。 2. 引用不能改变指向,指针不能改变指向。 3. 引用的大小是指向的变量的大小,指针是指针本身的大小,32位系统中4个字节。 4. 引用比指针安全,多个指针指向同一个变量,其中一个free了,其他都成了野指针。 更加详细的参见 http://blog.csdn.net转载 2015-07-24 14:44:23 · 311 阅读 · 0 评论 -
线程通信 线程同步(未完待续)
首先回答死锁的定义,所谓死锁就是一个进程集合中的多个进程因为竞争资源,而造成的互相等待现象。死锁的原因:系统资源不足;多个进程的推进顺序不合理死锁的必要条件:互斥条件(Mutual exclusion):资源不能被共享,只能由一个进程使用。 请求与保持条件(Hold and wait):已经得到资源的进程可以再次申请新的资源。 非剥夺条件(No pre-emption):已经分配的资源不能从相应原创 2015-07-24 14:38:05 · 330 阅读 · 0 评论 -
进程通讯
进程间通讯的方式:管道 管道是一种特殊的文件,对于进程来说,它和普通的文件没什么区别。1)管道是半双工的,数据只能一个方向流动;需要双方通信时,需要建立两个管道。 2)管道只能用于父子进程或兄弟进程之间。int pipe(int fileds[2]);创建一对指向管道inode节点为文件描述符,将其保存在fields数组中。fileds[0]用于读取,fileds[1]用于写入。进行父子进程之间原创 2015-07-24 14:14:24 · 289 阅读 · 0 评论 -
[智力题]
在一个重男轻女的国家里,每个家庭都想生男孩,如果他们生的孩子是女孩,就再生一个,直到生下的是男孩为止。这样的国家,男女比例会是多少?答案: 1:1假设有n对夫妇,生出n个孩子,由于生男生女比例相同,所以这n个孩子中有n/2个男孩,n/2个女孩(1:1) n/2对生女孩的夫妇继续生,只是问题的规模变小了还是一半生男孩(n/4)一半生女孩(n/4)(1:1) 所以一直这样下去 就是1:1。原创 2015-07-23 21:20:01 · 554 阅读 · 0 评论 -
[2016面试]海量数据处理
互联网公司面试很喜欢问海量数据的查找(查找某个数,查找重复的数,查找未出现的数等等)、排序(全部排序、部分排序,找出第k大的数,找出前k大的数等等)等问题,基本的问题都是数据量很大(内存不够存放——降低空间复杂度)和性能要求高(运行时间有要求——减低空间复杂度) 这里列出一些常见的一些问题来处理已知某个文件内包含一些电话号码,每个号码为8位数字,统计不同号码的个数。 8位最多99 999 99原创 2015-07-23 19:52:52 · 588 阅读 · 0 评论 -
const
const变量 const变量有三种出现的位置 关键的一点是:const关键字的目的是说明变量不能被修改或更新,所以定义时必须初始化 1、全局const变量 在进程内存那篇文章我们说过,全局的只读变量(const)被放在代码段,也可以说是只读数据段const int i =0; const全局变量是一定要初始化的,否则会编译错误。初始化后,编译器在类型检查后直接用0在编译时替换。 con原创 2015-07-23 12:56:36 · 1135 阅读 · 0 评论 -
define和内联函数
宏定义 宏替换是按定义替换成相应的常量表达式或字符闯,不会增加任何其他字符(如圆括号()等) #define NUM 5+7 p = NUM*NUM将会被替换成p = 5+7*5+7 所以宏定义仅仅是文本替换。宏定义与内联函数首先,为什么需要使用宏定义? 函数调用需要使用函数栈,需要一定的时间和空间的开销,影响其效率。 宏定义在预编译的地方将代码展开,不需要额外的时间和空间开销。宏原创 2015-07-21 11:25:47 · 782 阅读 · 0 评论 -
虚函数
OOP的核心是数据抽象、继承和动态绑定。 所有虚函数必须都有定义。通常情况下,我们不使用某个函数,则无需为该函数提供定义。但是我们必须为每一个虚函数提供定义,而不管它是否被用到了,这是因为连编译器也无法确定到底会用哪个虚函数。多态虚函数表不能声明为虚函数的函数普通函数(非成员函数) 因为普通函数只能被重载overload,不能被override(覆盖),它在编译时确定。构造函数 虚函数的原创 2015-07-23 13:34:57 · 294 阅读 · 0 评论 -
堆和栈的区别
一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回 收 。注意它与数据结构中的堆是两回事,分配方式倒是类似转载 2015-07-22 23:08:17 · 331 阅读 · 0 评论 -
类的大小(sizeof)
空类的大小 这句话本身是有些问题的,因为我们一般不说类的大小,而说对象的大小class A{};A a;sizeof(a);值应该是1,即一个字节。原因:空类也会被实例,每个实例在内存中都有一个独一无二的地址,为了达到这个目的,编译器往往会给一个空类隐含的加一个字节,这样空类在实例化后在内存得到了独一无二的地址.所以a的大小为1.sizeof(obj)和类的成员大小总和的关系1、对于有虚函数原创 2015-07-22 23:05:13 · 387 阅读 · 0 评论 -
C及C++格式控制符
算法题中经常要求按照某种固定的格式输出C语言中主要的使用printf()1.d格式:用来输出十进制整数。主要有以下几种用法:% - 0 m.n l或h 格式字符%:表示左对齐输出,如省略表示右对齐输出0:有0表示指定空位填0,如省略表示指定空位不填m.n m指域宽,即对应的输出项在输出设备上的所占的字符数。n指精度,用于说明输出的实型数的小数位数。未指定n时,隐含的精度为n原创 2015-03-06 15:06:14 · 1721 阅读 · 0 评论 -
静态变量 全局变量
变量可以分为全局变量、静态全局变量、静态局部变量和局部变量修饰符:全局变量在源文件的函数外部声明(不含extern),若其他源文件要调用这个变量,就需要通过extern关键字来引用一下。静态变量用static修饰按存储区域分:全局变量、静态全局变量和静态局部变量都存放在内存的全局数据区,局部变量存放在内存的栈区按作用域分:全局变量在整个工程文件内都有效,只需在一个源文件中定义defin原创 2015-03-20 10:43:33 · 510 阅读 · 0 评论 -
原码反码补码
本文谈论的都为有符号数。这得从二进制的原码说起:二进制原码最大为0111111111111111=215-1=32767二进制原码最小为1111111111111111=-(215-1)=-32767正0和负0:0000000000000000=1000000000000000=0所以,二进制原码表示时,范围是-32767~-0和0~32767,因为有两个零的存原创 2015-03-06 15:36:01 · 735 阅读 · 0 评论 -
各种排序算法实现及总结
本文主要比较一下各种排序的性能(平均时间复杂度和最差情况)和基本实现。 这个默认按照从小到大排列,输入的数据可以重复,假设输入的数组为A,下标从0到N-1注意在比较算法复杂度时,我们会关注键值的比较次数和交换次数。1、冒泡排序 冒泡排序如果不是因为名字比较好记,没有任何优势。它的思路是一趟又一趟的比较数组(或者链表也可以)中相邻的两个元素,如果前一个比后一个大,则交换。这样,每一轮之后,最大的那原创 2015-08-21 21:20:18 · 653 阅读 · 0 评论