C/C++
文章平均质量分 72
rongwenbin
这个作者很懒,什么都没留下…
展开
-
堆栈与函数调用
堆栈与函数调用 1) 在栈上创建。在执行函数时,函数内局部变量的存储单元都在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,一般使用寄存器来存取,效率很高,但是分配的内存容量有限。2) 从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete来释放内存。动转载 2013-10-16 16:25:32 · 637 阅读 · 0 评论 -
静态链接库、动态链接库与COM组件的区别
静态链接库、动态链接库与COM组件的区别1.动态链接库与静态链接库的区别。 1.1 静态链接库作为代码的一部分,在编译时被链接。 1.2 动态链接库有两种使用方式: 一种是静态加载,即在应用程序启动时被加载; 一种是动态加载,即是该动态链接库在被使用时才被应用程序加载。2.动态链接库和COM组件的区别 2.1 动态链接库的表现形式只转载 2013-11-22 12:03:16 · 2308 阅读 · 0 评论 -
C/C++内存泄漏及检测
C/C++内存泄漏及检测2011-02-20 17:51 by 吴秦, 19755 阅读, 9 评论, 收藏, 编辑 “该死系统存在内存泄漏问题”,项目中由于各方面因素,总是有人抱怨存在内存泄漏,系统长时间运行之后,可用内存越来越少,甚至导致了某些服务失败。内存泄漏是最难发现的常见错误之一,因为除非用完内存或调用malloc失败,否则都不会导致任何问题。实际上,使用C/转载 2013-12-10 16:06:09 · 533 阅读 · 0 评论 -
使用VC++ 6.0生成C运行时库详细指南
使用VC++ 6.0生成C运行时库详细指南 实验环境:Windows XP Microsoft Visual Studio 6.0 EnterpriseEdition参考网上文档《BUG:重新生成静态和动态 C 运行时库时出现问题》假设VC是安装在E:\ProgramFiles\Microsoft Visual Studio1. CRT 源代码的安装及配置文件的修改1.转载 2013-12-11 11:53:54 · 839 阅读 · 0 评论 -
区别覆盖,重载与多态
覆盖:在基类中定义了一个非虚拟函数,然后在派生类中又定义了一个同名同参数同返回类型的函数,这就是覆盖了。在派生类对象上直接调用这个函数名,只会调用派生类中的那个。重载:在基类中定义了一个非虚拟函数,然后在派生类中定义一个同名,但是具有不同的参数表的函数,这就是重载。在派生类对象上调用这几个函数时,用不同的参数会调用到不同的函数,有可能会直接调用到基类中的那个。原创 2013-12-12 12:16:22 · 598 阅读 · 0 评论 -
C++ 命名空间namespace
命名空间在C++中,名称(name)可以是符号常量、变量、宏、函数、结构、枚举、类和对象等等。为了避免,在大规模程序的设计中,以及在程序员使用各种各样的C++库时,这些标识符的命名发生冲突,标准C++引入了关键字namespace(命名空间/名字空间/名称空间/名域),可以更好地控制标识符的作用域。MFC中并没有使用命名空间,但是在.NET框架、MC++和C++/CLI中,都大量使用了命名转载 2013-12-12 16:19:33 · 520 阅读 · 0 评论 -
数组里a和&a的区别
#includeint main(void){ int a[5]={1,2,3,4,5}; int *ptr=(int *)(&a+1); //&a代表整个数组的地址,+1应该加上sizeof(a)的长度,所以ptr指向a[5]位置处。 printf("%d %d\n",*(a+1),*(ptr-1)); //a代表数组首元素的地址转载 2013-12-31 11:03:25 · 961 阅读 · 0 评论 -
C++基础面试题
const符号常量:(1)、const char *p(2)、char const *p(3)、char * const p如果const位于星号的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量。如果const位于星号的右侧,const就是修饰指针本身,即指针本身是常量。析构函数和虚函数的用法和作用?析构函数的作用是当对象生命期结束时释放对象所占用转载 2013-12-27 11:31:08 · 823 阅读 · 0 评论 -
函数指针和指针函数
【函数指针】在程序运行中,函数代码是程序的算法指令部分,它们和数组一样也占用存储空间,都有相应的地址。可以使用指针变量指向数组的首地址,也可以使用指针变量指向函数代码的首地址,指向函数代码首地址的指针变量称为函数指针。1.函数指针定义函数类型 (*指针变量名)(形参列表);“函数类型”说明函数的返回类型,由于“()”的优先级高于“*”,所以指针变量名外的括号必不可少,后面的“形转载 2014-01-02 12:05:05 · 513 阅读 · 0 评论 -
SendMessage、PostMessage原理
本文讲解SendMessage、PostMessage两个函数的实现原理,分为三个步骤进行讲解,分别适合初级、中级、高级程序员进行理解,三个步骤分别为:1、SendMessage、PostMessage的运行机制。2、SendMessage、PostMessage的运行内幕。3、SendMessage、PostMessage的内部实现。注:理解这篇文章之前,必须先了解Windows转载 2014-01-02 11:18:02 · 562 阅读 · 0 评论 -
MFC判断内存泄露的简单方法 CmemoryState
MFC提供了检查内存的类CmemoryState,我们就利用这个类的对象来检查内存泄露,以下是具体步骤:一:在你所检测的程序段的开始处建立一个 CmemoryState 对象,调用其成员函数Checkpoint,以取得当前内存使用情况的快照;二:在你所检测的程序段的末尾处再建立一个 CmemoryState 对象,调用其成员函数Checkpoint,以取得当前内存使用情况的快照;三:转载 2014-01-02 11:31:11 · 1471 阅读 · 0 评论 -
把类定义与类实现分开有什么实际意义?
1、保密——可以很容易看到类的接口,知道其使用方法,可以编译库后,只提供lib和头文件。2、加快编译速度——如果你把类的所有代码都内联定义到头文件中,那么所有需要用到这个类的CPP文件实际上都包含了更多的代码,编译器编译每个这样的CPP文件时都编译了这些代码。而分开定义,这些代码就只被编译了一遍,也就是在编译实现那个类的CPP文件时。还有就是当多个程序引用到类定义这个文件时,如果对实现有任转载 2014-01-03 15:52:04 · 1972 阅读 · 0 评论 -
C++经典面试题全集 50~100道 都附带有参考答案
51. 引用与指针有什么区别?答 、1) 引用必须被初始化,指针不必。2) 引用初始化以后不能被改变,指针可以改变所指的对象。3) 不存在指向空值的引用,但是存在指向空值的指针。 52. 描述实时系统的基本特性答 、在特定时间内完成特定的任务,实时性与可靠性。 54. 全局变量和局部变量在内存中是否有区别?如果有,是什么区别?答 、全局变量储存在静态数据区转载 2013-12-31 15:58:18 · 1429 阅读 · 0 评论 -
为什么要将成员函数的声明和定义分开
为什么将成员函数的声明和定义分开,直接使用合并的成员函数岂不是更加简洁而又方便?如:int print(){return weight;}要说明这个问题,我们得先了解内联函数。普通内联函数当我们定义了一个函数,编译器就会在内存中为其创建一个指令集,当我们调用这个函数时,程序就会跳转到该指令集处。当该函数运行完毕后,程序又会返回到原来执行调用该函数语句的下一行继续执行。假如对转载 2014-01-03 15:37:51 · 1616 阅读 · 0 评论 -
C面试题
4. static有什么用途?(请至少说明两种)1.限制变量的作用域2.设置变量的存储域7. 引用与指针有什么区别?1) 引用必须被初始化,指针不必。2) 引用初始化以后不能被改变,指针可以改变所指的对象。2) 不存在指向空值的引用,但是存在指向空值的指针。8. 描述实时系统的基本特性在特定时间内完成特定的任务,实时性与可靠性9.转载 2014-01-06 11:39:15 · 817 阅读 · 0 评论 -
华为笔试题大全(史上最齐全)
华为1.static有什么用途?(请至少说明两种) 1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。 2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。 3) 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块转载 2014-01-06 11:40:13 · 5921 阅读 · 0 评论 -
C语言笔试题带答案(十)
原文 http://www.mianwww.com/html/2012/01/12912.html一、选择题((1)~(10)每小题2分,(11)~(50)每小题1分,共60分)下列各题A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确的选项涂写在答题卡相应位置上,答在试卷上不得分。(1)数据的存储结构是指________。A)存储在外存中的数据转载 2014-01-06 15:56:27 · 4753 阅读 · 0 评论 -
C++笔试题库之编程、问答题 100~150道
C++笔试题库之编程、问答题 100~150道C++101. winsock建立连接的主要实现步骤?答:服务器端:socket()建立套接字,绑定(bind)并监听(listen),用accept()等待客户端连接, accept()发现有客户端连接,建立一个新的套接字,自身重新开始等待连接。该新产生的套接字使用send()和recv()写读数据,直至数据交换完毕,cl转载 2014-01-03 15:57:34 · 961 阅读 · 0 评论 -
C/C++ 笔试、面试题目大汇总
这些东西有点烦,有点无聊。如果要去C++面试就看看吧。几年前网上搜索的。刚才看到,就整理一下,里面有些被我改了,感觉之前说的不对或不完善。 1.求下面函数的返回值( 微软)int func(x) { int countx =0;while(x) { countx ++; x = x&(x-1);} return countx;转载 2014-01-06 11:05:40 · 645 阅读 · 0 评论 -
二维数组与数组指针的用法
#includeusing namespace std;int main(){ int v[2][10]={{1,2,3,4,5,6,7,8,9,10},{11,12,13,14,15,16,17,18,19,20}}; int (*a)[10]=v; cout cout cout cout cout cout r转载 2014-01-07 15:01:02 · 2231 阅读 · 0 评论 -
迷途指针(失控指针) 野指针
编程中有一种很难发现的错误是迷途指针。迷途指针也叫悬浮指针(失控指针),是对一个指针进行delete操作后并没有把它设置为空时产生的。在C++中,delete一个指针仅仅是释放它所指向的内存,即把这块内存区标明为可用,而不会改变指针所指向的地址值。而后,你如果没有重新赋值就试图再次使用该指针,引起的结果是不可预料的。 根据前人的经验,在删除指针后小心不要再使用它。虽然这个指针仍然指向转载 2014-01-07 15:20:21 · 761 阅读 · 0 评论 -
C++抽象类
一、定义:纯虚函数是在基类中声明的虚函数,它在基类中没有定义,但要求任何派生类都要定义自己的实现方法。在基类中实现纯虚函数的方法是在函数原型后加“=0”。virtual void funtion1()=0;二、引入原因:1、为了方便使用多态特性,我们常常需要在基类中定义虚拟函数。2、在很多情况下,基类本身生成对象是不合情理的。例如,动物作为一个基类可以派生出老虎转载 2014-01-07 17:57:57 · 451 阅读 · 0 评论 -
解读关键字volatile(C语言面试题分析之一)
一.volatile是什么?volatile关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如:操作系统、硬件或者其它线程等。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问。二.编译器优化是什么意思?int i = 5;int a = i;……int b = i;编译器发现两次从i读数据转载 2014-01-09 15:47:01 · 575 阅读 · 0 评论 -
数组指针和指针数组的区别
数组指针(也称行指针)定义 int (*p)[n];()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。如要将二维数组赋给一指针,应这样赋值:int a[3][4];int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组。p=a; /转载 2013-12-26 11:00:01 · 527 阅读 · 0 评论 -
谈谈C++类型安全
什么是类型安全?类型安全很大程度上可以等价于内存安全,类型安全的代码不会试图访问自己没被授权的内存区域。“类型安全”常被用来形容编程语言,其根据在于该门编程语言是否提供保障类型安全的机制;有的时候也用“类型安全”形容某个程序,判别的标准在于该程序是否隐含类型错误。类型安全的编程语言与类型安全的程序之间,没有必然联系。好的程序员可以使用类型不那么安全的语言写出类型相当安全的程序,相反的,差一转载 2014-01-10 15:18:07 · 488 阅读 · 0 评论 -
string和CString 的比较及区别
(一) 概述string和CString均是字符串模板类,string为标准模板类(STL)定义的字符串类,已经纳入C++标准之中;CString(typedef CStringT> CString)为Visual C++中最常用的字符串类,继承自CSimpleStringT类,主要应用在MFC和ATL编程中,主要数据类型有char(应用于ANSI),wchar_t(unicode转载 2014-01-10 11:54:08 · 2066 阅读 · 0 评论 -
函数中的数组参数
在c和c++中,数组作为函数的参数,要掌握以下几点:1.数组作为参数时,退化为指针数组参数不是按值传递,它是传递第一个元素(准确地说是第0个)的指针(即数组被传递为指针)。例如,如下声明:void putValues(int[10]); 被编译器视为:void putValues(int*);C/C++数组参数的长度与参数声明无关。因此,下列三个声明是等价的:void pu转载 2013-12-27 11:57:40 · 781 阅读 · 0 评论 -
全局变量、局部变量、静态全局变量、静态局部变量的区别
C++变量根据定义位置的不同,具有不同的作用域,作用域可分为6种:全局作用域,局部作用域,语句作用域,类作用域,命名作用域和文件作用域。从作用域看:全局变量具有全局作用域。全局变量只需在一个源文件中定义,就可以作用于所有的源文件。当然,其他不包括全局变量定义的源文件需要用extern关键字再次声明这个全局变量。静态局部变量具有局部作用域。它只被初始化一次,自从第一次初始化直到程序与你新转载 2013-12-27 15:36:45 · 504 阅读 · 0 评论 -
c++中的智能指针是什么
c++程序员一个头疼的问题就是用指针开空间与销毁空间。试着执行下面一段代码:/*******************************/class A{public: int *q; A(int *p){q=p;} ~A(){delete q;}};class B{public: int *q; B(int *p){q=p;} ~B(){delete q;}}转载 2014-01-13 11:21:57 · 535 阅读 · 0 评论 -
模板类与类模板、函数模板与模板函数等的区别
在C++中有好几个这样的术语,但是我们很多时候用的并不正确,几乎是互相替换混淆使用。下面我想彻底辨清几个术语,这样就可以避免很多概念上的混淆和使用上的错误。这几个词是: 函数指针——指针函数 数组指针——指针数组 类模板——模板类 函数模板——模板函数 最终在使用中,我们就可以让它们实至名归,名正言顺。 1.函数指针——指针函转载 2014-01-13 11:51:22 · 455 阅读 · 0 评论 -
CSingleLock的使用方法(多线程)
转自:http://zyyoung.blog.sohu.com/100642344.htmlCSingleLock习多线程之三:线程同步--使用互斥互斥跟临界区很相似,便远比临界区复杂。因为使用互斥不仅仅能够在同一应用程序不同线程中实现资源的安全共享,而且可以在不同应用程序的线程之间实现对资源的安全共享。通过CMutex来完成线程间的互质,即:CMutex Mute转载 2014-01-13 11:56:21 · 5612 阅读 · 0 评论 -
CSingleLock CMultiLockquiet
CSingleLock类 CSingleLock没有基类。一个CSingleLock类对象代表一种访问控制机制,这种机制用于控制在一个多线程程序中对一个资源的访问。为了使用同步类CSemaphore,CMutex,CCriticalSection,和CEvent。你必须创建一个CSingleLock或CMultiLock对象来等待和释放这个同步对象。当你只需要每次等待一个对象时,可以使转载 2014-01-13 12:20:53 · 950 阅读 · 0 评论 -
多线程 or 多进程
多线程 or 多进程 在 Unix上编程采用多线程还是多进程的争执由来已久,这种争执最常见到在C/S通讯中服务端并发技术的选型上,比如WEB服务器技术中,Apache是采 用多进程的(perfork模式,每客户连接对应一个进程,每进程中只存在唯一一个执行线程), Java的Web容器Tomca转载 2014-01-13 15:21:23 · 757 阅读 · 0 评论 -
C++编程,数据结构,算法类面试题集
1. 在linked list中找倒数第N个结点2. 倒转linked list3. 二叉树的结点有指向parent的指针,求最近公共祖先4. 给一个数组,如何打印该数组成员构成集合的全部子集合.5. 有两个字符串,一个是text,一个是command, Command有四种: ‘+’: 在text中前进一位 ‘-’: 在text中后退一位 ‘a’: 在当前转载 2014-01-13 17:28:37 · 9102 阅读 · 0 评论 -
为什么要内存对齐?字节对齐和边界对齐介绍。
大家都知道一个byte是8个bit,而现在流行的32位机指的是一次可以存取32个bit,也就是4个byte,在这种情况下,最有效率的作法当然是一次读4个byte。也就是即便你只取一个byte的内容,实际上,机器一次也是取了4个byte,然后把其中的一个byte给你。当然取4个byte并不是随机组合的,而是按照一定的次序,比如一次取0、1、2、3四个单元的内容,下次访问就是4、5、6、7。由转载 2014-01-21 14:30:28 · 4111 阅读 · 1 评论 -
彻底搞定C指针-函数名与函数指针
彻底搞定C指针-函数名与函数指针一 通常的函数调用一个通常的函数调用的例子://自行包含头文件void MyFun(int x); //此处的申明也可写成:void MyFun( int );int main(int argc, char* argv[]){ MyFun(10); //这里是调用MyFun(10);函数 re转载 2014-01-21 11:04:47 · 475 阅读 · 0 评论 -
io阻塞与io非阻塞
handscup:这里要注意,其实非阻塞IO和异步IO的概念一样,此文所说的异步/异步,指的是线程,且不完全正确。正确的要看http://en.wikipedia.org/wiki/Asynchronous_I/O。-----------------------同步与异步IO、阻塞与非阻塞IO很多时候我们常常看到同步与异步,阻塞与非阻塞的出现。有的地方直接将同步与阻塞画上了等号。异转载 2014-01-13 15:58:05 · 541 阅读 · 0 评论 -
网络IO之阻塞、非阻塞、同步、异步总结
1、前言 在网络编程中,阻塞、非阻塞、同步、异步经常被提到。unix网络编程第一卷第六章专门讨论五种不同的IO模型,Stevens讲的非常详细,我记得去年看第一遍时候,似懂非懂,没有深入理解。网上有详细的分析:http://blog.csdn.net/historyasamirror/article/details/5778378。我结合网上博客和书总结一下,加以区别,加深理解。2、数据转载 2014-01-13 17:15:24 · 593 阅读 · 0 评论 -
同步I/O(阻塞I/O),异步I/O(非阻塞)
异步io设计,是指设计者在通知内核进行io操作后,不会等待io动作完成,而是转而去完成其他工作,内核在io完成后再发信号告知调用者io已经完成,设计目的是提高效率。同步io设计,是指设计者必须确认io是否已经完成(不用管是成功的还是不成功的),再此基础上才能继续往下执行其他工作。显然,异步io设计不会显式调用read,write,select等,因为这些工作是由内核完成并告知你的。也就是说转载 2014-01-13 17:23:35 · 647 阅读 · 0 评论 -
C++和操作系统面试问题分类
inline的使用是有所限制的,inline只适合函数体内代码简单的函数使用,不能包含复杂的结构控制语句例如while switch,并且不能内联函数本身不能是直接递归函数(自己内部还调用自己的函数)C++多态实现机制:在C++中,对于有virtual的类,其sizeof会比正常情况多处4个字节。既在类的最开始四个字节,放的是VTABLE表的地址(void *类型)。而在VTABLE中,所有虚转载 2014-01-13 17:25:37 · 524 阅读 · 0 评论