C++编程
文章平均质量分 89
飞天絮雪
学习这几件事不是缺乏实践,而是缺乏努力!
展开
-
对内存重叠的深入认识
内存重叠:拷贝的目的地址在源地址范围内。所谓内存重叠就是拷贝的目的地址和源地址有重叠。在函数strcpy和函数memcpy都没有对内存重叠做处理的,使用这两个函数的时候只有程序员自己保证源地址和目标地址不重叠,或者使用memmove函数进行内存拷贝。memmove函数对内存重叠做了处理。现在来看函数strcpy原型:extern char *strcpy(char *dest,ch原创 2012-01-12 00:01:56 · 15426 阅读 · 9 评论 -
转换成C风格的char *字符串
转换成C风格的char *字符串 本来今天想写个心情博客,楠哥走了,自习结束了,但是写了半天也没有感觉,还是赶紧写点东西吧。简单的一个:String类提供了几个成员函数,用于将string类的对象转换成C风格的基于指针的字符串。C++字符串不要求以null结尾。如果某个函数的实参是一个基于指针的字符串,则这些转换函数就可排上用场。下面的demo演示了将string对象转换成基于指原创 2012-03-07 22:29:26 · 3646 阅读 · 0 评论 -
变量定义和声明的区别(整理)
变量的声明有两种情况:1、一种是需要建立存储空间的。例如:int a 在声明的时候就已经建立了存储空间。2、另一种是不需要建立存储空间的。 例如:extern int a 其中变量a是在别的文件中定义的。声明是向编译器介绍名字--标识符。它告诉编译器“这个函数或变量在某处可找到,它的模样象什么”。而定义是说:“在这里建立变量”或“在这里建立函数”。它为名字分配存储空间。无论定义的是原创 2012-01-16 08:36:28 · 26704 阅读 · 16 评论 -
关于内存思考之二——动态分配内存
关于内存思考之二——动态分配内存 我们都很熟悉分配内存常用的是malloc函数和new函数。但是还有其他的2个。今天没时间了,整理下小知识点,很简单。 分配内存的函数有多个不同的原型,这些都已经集成在库函数stdlib.h中了。函数一void *malloc(unsigned int num_bytes); 调用该函数,需要用户指定分配内存空间的大小。分配成功原创 2012-03-09 23:07:05 · 1609 阅读 · 2 评论 -
产生固定格式的随机数
产生固定格式的随机数 今天在做NGOD点播课题的时候,遇到了OnDemandSessionId: 4w3653434544464335其中每一次点播,这个字符串理应不同,由于后面的字符串“4w3653434544464335”(18个字符)是个随机的字符串,每次字符串都应该不相同。 我的解决办法是:用一个字符串数组,大小为19,其中最后一个字符为 '\0',存放这个字符串。原创 2012-03-27 19:43:30 · 1156 阅读 · 0 评论 -
C语言深度解剖读书笔记之——C语言基础测试题
C语言深度解剖读书笔记之——C语言基础测试题 前几天天看到这本书,感觉不错,在看之前,先做了后面的习题,结果只得了60多分,一直以为自己的基础还是不错的,做完后对了答案后,感觉自己的自信心一下全没有了,不过遇到问题解决问题,我用了2天时间好好研读了这本书,感觉真不错。虽然感觉都是一些基础的知识,但是我读的还是津津有味,感觉收获蛮多的,感谢这本书的作者陈正冲。呵呵,说来我本科专业和这位大牛还是原创 2012-03-08 23:33:37 · 14674 阅读 · 89 评论 -
内存对齐(内存中的数据对齐)、大端模式及小端模式
数据对齐,是指数据所在的内存地址必须是该数据长度的整数倍。DWORD数据的内存起始地址能被4除尽,WORD数据的内存起始地址能被2除尽。X86 CPU能直接访问对齐的数据,当它试图访问一个未对齐的数据时,会在内部进行一系列的调整。这些调整对于程序员来说是透明的,但是会降低运行速度,所以编译器在编译程序时会尽量保证数据对齐。不同的编译器内存对齐的方式不同。一个小例子:在32位的机器上,数据是原创 2012-03-13 21:18:12 · 13187 阅读 · 5 评论 -
回调函数
回调函数 今天面试了2家公司,还算可以吧,明天还得去西站接我朋友,下午还得继续面试,今天回来好累啊,我知道找工作是很辛苦的,加油吧,但是再累博客也得更新吧,因为今天不更新的话,明天也不会更新了,还是最好不开这个头,找一个小的知识点,探讨一下:回调函数。 在看回调函数之前,要先理解函数指针的概念,在我的博客:函数指针与函数指针数组的使用方法——http://blog.csdn.n原创 2012-03-14 23:34:12 · 1645 阅读 · 6 评论 -
六一儿童节倾情奉献,校内首发,CSDN再发,2011年冬季c/c++程序员找工作心得
六一儿童节倾情奉献,校内首发,CSDN再发,2011年冬季c/c++程序员找工作心得 我把2011年末2个月去的公司,遇到的问题整理出来,自己复习下,也供大家参考。其实没什么经验,也就是流水账。对部分公司我也发表了自己的观点,不过纯属自己的体会,给大家参考下。所有的笔试题目都是部分的,我记录下的都是自己认为比较经典的,要么就是我不太会的,至于一些常考的,简单的不能再简单的,就没有必要记原创 2012-06-01 23:16:16 · 5787 阅读 · 1 评论 -
启明星辰2011校园招C笔试题(一)
题目来自互联网:http://wenku.baidu.com/view/1b71537201f69e314332947f.html答案:自己做的,可能有错误,请多指正。 QQ:447872587C语言部分:语言部分一、简单编程,请用一句语句完成下列操作1. 位操作:将变量unsigned long register的0,4,6位清0 32位下原创 2012-02-04 21:31:51 · 7468 阅读 · 10 评论 -
Linux下测试程序的运行时间
Linux下测试程序的运行时间简单写个小的知识点,测试代码的性能,测试代码执行的时间。要包含头文件#include "time.h"#include 代码如下:/*...............测试程序运行时间...................*/ time_t startT,endT; double totalT; startT = time(NULL)原创 2012-05-21 18:35:31 · 5369 阅读 · 3 评论 -
处理大并发之二 对epoll的理解,epoll客户端服务端代码
处理大并发之二对epoll的理解,epoll客户端服务端代码序言:该博客是一系列的博客,首先从最基础的epoll说起,然后研究libevent源码及使用方法,最后研究nginx和node.js,关于select,poll这里不做说明,只说明其相对于epoll的不足,其实select和poll我也没用过,因为我选择了epoll。说起epoll,做过大并发的估计都不陌生,之前做了个ST原创 2013-07-16 20:25:53 · 26578 阅读 · 6 评论 -
固定数组随机数
固定数组随机数 有时候需要固定数量随机数,但是要保证这些随机数都在一定的范围内且这些随机数不一样。 方法1,将其产生的随机数放入一个vector中,每次放入数据的时候对vector进行find,find失败则放入数据。这种方法就不贴代码了,因为性能不高,要是想要一个100万条的随机数,不知何时程序才能执行完,因为find的效率太低了。 方法2,将随机数插入set容器中,因为原创 2013-07-09 20:18:11 · 2830 阅读 · 0 评论 -
对深拷贝与浅拷贝的再次理解
对深拷贝与浅拷贝的再次理解 记得11年底找工作的时候,面试时曾经遇到有面试官问的对深拷贝与浅拷贝的理解,那时候自己回来查了资料,写了篇博客,感觉自己理解了,其实理解的不深刻,最近在调试bug的时候,再次遇到深拷贝与浅拷贝,认真分析了,写写自己的心的吧。 先说下自己的理解吧,浅拷贝,即在定义一个类A,使用类似A obj; A obj1(obj);或者A obj1 = obj原创 2013-07-08 21:59:07 · 53042 阅读 · 17 评论 -
Linux下精确控制时间的函数
Linux下精确控制时间的函数 在测试程序接口运行时间的时候,常用time,gettimeofday等函数,但是这些函数在程序执行的时候是耗费时间的,如果仅仅测试时间还行,但是如果程序中用到时间控制类的函数,如time, gettimeofday自身还会消耗不少时间,且增加程序执行的成本,这样得到的时间不精确。 针对这种情况,使用CPU心跳的函数来处原创 2013-07-09 20:16:46 · 3730 阅读 · 0 评论 -
memcache研究
memcache研究最近开发了一个数据库,该数据库是利用共享内存做的,测试了下增删改查的性能,想与memcached数据库做个对比,故研究下memcached。那什么是memcached?memcached是一个高性能,分布式的内存缓存服务器,通过内存的数据访问来降低对数据库的访问,从而提高动态内容应用网站的速度。memcached的特征:(1) 基于C/S架构,协原创 2013-07-11 21:38:04 · 2191 阅读 · 0 评论 -
五颜六色的日志
日志打印根据cout颜色的处理,封装了一个日志处理函数。一个小小的工具,方便日志调试。"\33[0m" :白色"\33[1m\33[34m":蓝色"\33[1m\33[33m":黄色"\33[1m\33[31m":红色"\33[1m\33[35m":粉色"\33[1m\33[32m":绿色根据此进行封装直接贴代码文件log.h#ifndef LOG_H#原创 2013-07-09 20:21:10 · 1921 阅读 · 0 评论 -
python 关于配置文件,日志,传参总结
python 关于配置文件,日志,传参总结前段时间用python做了些工作,说实在的,之前也就是了解一点python,没有用其做过东西,这次做完之后,感觉python脚本挺强大的,在日志,配置,字符处理与mysql的连接都做得比较好。现将其总结下一、python的日志功能只要在程序中添加import logging,就可以使用其日志功能,其日志级别包括:日志级别包括:NOTSET原创 2013-12-02 18:32:45 · 4819 阅读 · 0 评论 -
何时调用构造函数和析构函数
何时调用构造函数和析构函数构造函数的作用是保证每个对象的数据成员都有何时的初始值。析构函数的作用是回收内存和资源,通常用于释放在构造函数或对象生命期内获取的资源。一般我们都知道构造和析构的次序: 构造从类层次的最根处开始,在每一层中,首先调用基类的构造函数,然后调用成员对象的构造函数。析构则严格按照与构造相反的次序执行,该次序是唯一的,否则编译器将无法自动执行析构过程。原创 2012-03-05 23:38:43 · 19123 阅读 · 0 评论 -
对基类与派生类对象和指针赋值的小结
对基类与派生类对象和指针赋值的小结 今天身体不舒服,少写一点,但是贵在坚持,只要在学校就要更新博客。《C语言深度解剖》我用2天时间看完了,那本书的自测题,我才做了60多分。我觉得我面试的时候要是遇到这样的题目,我会感觉这个公司出题很有水平。感觉这本书写的很好,是我继读完林锐博士的《高质量C/C++编程语言》后遇到的又一本好书。不过这本书更细致点,过几天写下这本书的读数笔记。下面回顾下基本原创 2012-03-06 20:52:20 · 16090 阅读 · 7 评论 -
一道简单的机试题目引发的移位总结
移位一、什么是位?位是用来保存一组项或条件的yes/no信息(有时又称标志)的简洁方法。二、位操作符位操作符使用整形的操作数。位操作符将其整形操作数视为二进制位的集合,为每一位提供检验好设置的功能。对于位操作符,由于系统不能确保如何处理其操作数的符号位,所以强烈建议使用unsigned整形操作数。1、 & 按位与两个数据,如果两个相应的二进位都为1,则该位的结果为1,否原创 2012-03-03 23:28:39 · 1334 阅读 · 5 评论 -
作用域种类
在一次笔试的时候遇到的, 自己写的不太全,查了下资料,现在整理如下:来自:http://media.openonline.com.cn/media_file/rm/zhongkeda2006/shujujiegou/link/content/chapt5_7_1.htm不同的标识符有着不同的作用域。按作用域的大小可分为如下5种,从大到小依次为: ·程序级 ·文件级 ·类级原创 2012-01-12 21:11:00 · 1710 阅读 · 0 评论 -
assert用法总结(一道信威通信面试题的启示)
信威通信原题:比较下面2个有什么不同Fun(int a) {Assert(a>=0);}Fun(int a) {Assert(a++>=0);}assert(断言)程序一般分为Debug 版本和Release 版本,Debug 版本用于内部调试,Release版本发行给用户使用。断言assert是仅在Debug 版本起作用的宏,它用于监测“不应该”发生的情况。为了不在程序的Debu原创 2012-01-13 21:13:31 · 2721 阅读 · 0 评论 -
对深拷贝与浅拷贝的理解
首先看下:拷贝构造函数和赋值函数的区别:例如:一个类叫做:"myclass",并有一个实例b 那么(1) myclass a=b; 拷贝构造函数 (2)myclass a; a=b; 赋值构造函数两者调用的时间不一样:第一种情况下,a此时还没有被分配空间,在赋值的同时还要生成资源原创 2012-01-11 21:50:19 · 1999 阅读 · 3 评论 -
明基(BENQ)2012校园招聘笔试题之C++方向(试题+答案)
在CSDN上看到有童鞋问答案,自己做了份答案,不一定完全正确,望大家多多指正。1. What’s overload function in C++?“重载”是指编写一个与已有函数同名但参数表不同的函数。构成重载的条件是:在相同的范围内(比如说在同一个类中),函数名字相同,但函数参数不同(要么参数类型不同,要么参数个数不同,要么两者都不同)2. A. What’s inline func原创 2012-01-14 22:51:03 · 1742 阅读 · 0 评论 -
预处理器小结
预处理器发生在程序被编译之前,所有的预处理器指令都以#开头。1. #include预处理器指令:使指定文件的一个副本被包含到指令所在的位置。#include 与#include “filename”区别(简单不加以说明)#include 指令用于包含标准类库头文件,也可以用于由多个源文件组成的程序。2. #include 预处理器指令:符号常量 #define identi原创 2012-02-02 19:33:38 · 1330 阅读 · 0 评论 -
启明星辰2011校园招聘(二) c++部分笔试题
答案如有错误,请大家留言指教。自己亲身经历的部分笔试题目如下: 1.C2为字符型,执行语句C2=’A’+’6’-‘3’后,C2的值为 (D) 分析:ASCII:65+54-51=68->D ASCII值 048 对应 字符02.c=5,a=2+(c+=c++,c+8,c++);a应该为多少?答案:a=13;分析:c=5,c+=c++得c=11;c+8原创 2012-02-05 20:40:47 · 3655 阅读 · 1 评论 -
c++标准库的类模板vector介绍
c++标准库的类模板vector介绍下面我根据我的学习情况介绍下标准库的类模板vector,它代表一种更健壮的数据类型,提供了许多额外的功能。C++标准类库提供了模板vector,它使得程序员能够创建一种功能强大并且不容易出错的数据类型。下面以一个程序的实际例子为例,初识下vector。// vector_demo.cpp : 定义控制台应用程序的入口点。// #inc原创 2012-02-03 23:47:31 · 2519 阅读 · 0 评论 -
关于内存思考之一:有效管理内存空间
有效管理内存空间在翻看《写给大家的C语言书》的时候,感觉里面写的内存管理比较不错,整理出来,再研读一遍。结合高质量c++编程指南首选看什么是堆?堆其实就是电脑中未使用的内存的集合。剩余的内存——在你的程序、程序的变量和操作系统的空间之后——组成了电脑上可用的堆空间。如图: DOS 你的C程序 你的原创 2012-02-12 14:37:14 · 1533 阅读 · 1 评论 -
函数调用栈与活动记录
函数调用栈与活动记录在调试的时候经常遇到栈溢出,由此总结了下函数调用栈的知识。为了理解C++是如何执行函数调用的,先考虑一个称为栈(stack)的数据结构。栈是一种后入先出的数据结构——压入(插入)栈的最后一项,是从栈中弹出(移走)的第一项。函数调用栈是“在幕后起作用的”,它支持函数调用/返回机制。它还支持每个被掉函数的自动变量的创建、维护和销毁。当调用每个函数时,它可能调用其他函原创 2012-02-19 20:13:14 · 5833 阅读 · 1 评论 -
函数指针与函数指针数组的使用方法
函数指针与函数指针数组的使用方法函数指针:函数指针包含函数在内存中的地址。数组名实际上就是数组的第一个元素在内存中的地址,类似地,函数名实际上也是执行这个函数任务的代码在内存中的起始地址。函数指针可以传递给函数、从函数返回、保存在数组中、赋予另一个函数指针或者调用底层函数。下面我们用数值算法accumulate讨论下函数指针的用法。accumulate是一种常用的STL数学算法。原创 2012-02-27 23:00:07 · 67941 阅读 · 0 评论 -
模板——函数模板、类模板
模板函数模板使程序员能够用单段代码指定相关(重载)函数的全部范围,称为函数模板特殊化;类模板使程序员能够用单段代码指定相关类的全部范围,称为类模板特殊化。什么是泛型编程?STL方法允许编写通用的程序,使得代码不依赖于底层的容器。这种编程风格被称为泛型编程。泛型编程以独立于任何特定类型的方式编写代码,泛型编程与面向对象编程一样,都依赖于某种形式的多态性。函数模板特殊化和类模板特殊原创 2012-02-28 23:09:31 · 2538 阅读 · 0 评论 -
常量对象与常量成员函数
常量对象与常量成员函数常量对象与常量成员函数来防止修改对象,实现最低权限原则。可以用关键字const来指定对象是不可修改的,任何修改该对象的企图,都会导致编译错误。例如:const Time noon(12,0,0); 声明一个Time 类的常量对象noon,并将它初始化为中午12点。C++不允许在常量对象上调用成员函数,除非成员函数本身也被声明为常量。甚至对不会修改对象的成原创 2012-03-01 23:53:59 · 11843 阅读 · 0 评论 -
异常处理 续之(堆栈解退、auto_ptr)
1.堆栈解退当抛出了异常,但还没在特定的作用域中被捕获时,函数调用堆栈便被“解退”,并试图在下一个外层try...catch代码中捕获这个异常。解退函数调用堆栈意味着抛出未捕获异常的那个函数将终止,这个函数中的所有局部变量都将销毁,控制会返回到原先调用这个函数的语句。如果有一个try代码块包含了这条语句,则它就会试图捕获这个异常。如果没有代码块包含这条语句,则堆栈解退再次发生。如果没有任何原创 2012-03-02 23:44:15 · 3431 阅读 · 1 评论 -
4种命名的显式(强制类型)转换
4种命名的显式(强制类型)转换显式转换也称强制类型转换(cast)一、何时需要强制类型转换?因为要覆盖通常的标准转换,所以需要显式使用强制类型转换。例如:double dval; int ival; ival *= dval;为了与dval做乘法操作,需将ival转化为double 型,然后将乘法操作的double 型结果截尾为int型,再赋给ival。为原创 2012-02-29 22:43:54 · 9832 阅读 · 0 评论 -
异常处理总结
异常处理1.什么是异常?异常就是运行时出现不正常,例如:运行时耗尽了内存或遇到了意外的非法输入。异常存在于程序的正常功能之外,并要求程序立即处理。2.何时使用异常处理?异常处理专门用于处理同步错误,这种错误是在执行语句时发生的。常见的有:(1)数组下标越界(2)算数溢出(3)除0(4)无效的参数(5)不成功的内存分配(由于内存不够)3.C++的异常处理包括哪原创 2012-03-02 17:52:21 · 2316 阅读 · 0 评论 -
多线程学习系列之——一个简单的多线程程序
多线程学习系列之——一个简单的多线程程序 一、 首先看下什么是进程,什么是线程?1. 进程进程是资源申请、调度和独立运行的单位,它使用系统中的运行资源。进程通常被定义为一个正在运行程序的实例,是一个程序在其自身的地址空间中的一次执行活动。进程有两部分组成:(1)内核对象,有操作系统来管理内核对象是系统用来存放进程的统计信息的地方。内核对象是操作系统内部分配的一个原创 2012-03-04 17:46:37 · 13199 阅读 · 1 评论 -
用无符号的整形来表示一个IP地址
用无符号的整形来表示一个IP地址 在socket编程的时候,一般我们会用到addr.sin_addr.s_addr=inet_addr("192.168.1.117");但是对于这个IP地址的输入参数,我们只能是字符串型的,很多场合要求输入的参数是整形。这时候我们就应该想一些其他的处理办法。 我在做这个的时候,暂时没想到其他好的方法,只能在输入参数的地方提供一个数组,但是不符合原创 2012-05-25 12:56:30 · 5166 阅读 · 0 评论