
C/C++
文章平均质量分 73
koudaidai
这个作者很懒,什么都没留下…
展开
-
C++编程对缓冲区的理解
什么是缓冲区缓冲区又称为缓存,它是内存空间的一部分。也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区。缓冲区根据其对应的是输入设备还是输出设备,分为输入缓冲区和输出缓冲区。为什么要引入缓冲区我们为什么要引入缓冲区呢?比如我们从磁盘里取信息,我们先把读出的数据放在缓冲区,计算机再直接从缓冲区中取数据,等缓冲区的数据转载 2012-03-14 14:43:53 · 608 阅读 · 0 评论 -
C语言关键字——extern和static
引言:C语言中提供了存储说明符auto,register,extern,static说明的四种存储类别。四种存储类别说明符有两种存储期:自动存储期和静态存储期。其中auto和register对应自动存储期。具有自动存储期的变量在进入声明该变量的程序块是被建立,它在该程序块活动时存在,退出该程序块时撤销。关键字extern和static用来说明具有静态存储期的变量和函数。用static声原创 2012-04-06 09:34:17 · 833 阅读 · 0 评论 -
关于NULL在C和C++中的区别
这个问题源自对'\0',0,以及NULL的探究!先看看标题所提到的内容:根据https://research.microsoft.com/en-us/um/redmond/projects/invisible/include/__defs.h.htm文档中的定义:#if !defined(NULL) && defined(__NEEDS_NULL)#ifdef __cplusp原创 2012-04-06 16:53:40 · 683 阅读 · 0 评论 -
strstr/strcpy/strpbrk的函数
第一节、字符串查找1.1题目描述:给定一个字符串A,要求在A中查找一个子串B。如A="ABCDF",要你在A中查找子串B=“CD”。分析:比较简单,相当于实现strstr库函数,主体代码如下://在字符串中查找指定字符串的第一次出现,不能找到则返回-1 int strstr(char *string, char *substring) {原创 2012-03-21 22:51:37 · 984 阅读 · 0 评论 -
随机数的生成
标准库(被包含于中)提供两个帮助生成伪随机数的函数:函数一:int rand(void);从srand (seed)中指定的seed开始,返回一个[seed, RAND_MAX(0x7fff))间的随机整数。函数二:void srand(unsigned seed);参数seed是rand()的种子,用来初始化rand()的起始值。可以认为rand()在每次被调用的原创 2012-04-25 15:21:52 · 1131 阅读 · 0 评论 -
C++ 私有构造函数的作用
很多情况下要求当前的程序中只有一个object。例如一个程序只有一个和数据库的连接,只有一个鼠标的object。通常我们都将构造函数的声明置于public区段,假如我们将其放入private区段中会发生什么样的后果?这意味着什么? 当我们在程序中声明一个对象时,编译器为调用构造函数(如果有的话),而这个调用将通常是外部的,也就是说它不属于class对象本身的调用,假如构造函数是私原创 2012-05-08 16:07:50 · 21769 阅读 · 2 评论 -
用堆实现优先队列
堆的性质:1.一个是他是一个数组(当然你也可以真的用链表来做。)。2.他可以看做一个完全二叉树。注意是完全二叉树。所以他的叶子个数刚好是nSize / 2个。3.我使用的下标从1开始,这样好算,如果节点的位置为i,他的父节点就是i/2,他的左孩子结点就是i*2,右孩子结点就是i*2+1,如果下标从0开始,要复杂一点。4.他的父节点一定不比子节点小(我所指的是最大堆)。由这些原创 2012-05-04 10:08:47 · 686 阅读 · 0 评论 -
字符串转化为数字
面试例题1:使用库函数将字符串转换为数字。考点:C库函数中字符串转换为数字的使用。出现频率:★★★★解析与上节数字转换为字符串类似,C/C++语言提供了几个标准库函数,可以将字符串转换为任意类型(整型、长整型、浮点型等)。以下列举了各函数的方法及其说明。atof():将字符串转换为双精度浮点型值。atoi():将字符串转换为整型值。atol():将字符串转换原创 2012-05-08 15:41:55 · 2637 阅读 · 0 评论 -
c语言string类函数实现汇总
看到很多地方都面试或者考试都要涉及字符串的很多知识 有的需要自己写字符串 最近看书的收集了一些 算是摘抄 然后在其中加了点我自己的感受 嘿嘿strcpy 函数 ,作用是将一个字符串的字符复制到另一个字符串中char * strcpy(char *destination ,const char * source){ while(*destination++=*so转载 2012-05-13 18:24:43 · 4421 阅读 · 0 评论 -
C语言标准库函数qsort排序的介绍与使用
qsort函数声明如下:void qsort(void *base, size_t nmemb, size_t size, int(*compar)(const void *, const void *));参数说明如下:base: 要排序的数组nmemb: 数组中的元素数目size: 每个数组元素占用内存空间,可使用sizeof获得compar: 比较两个数组元素的比原创 2012-05-13 18:52:51 · 853 阅读 · 0 评论 -
深入理解C++中的mutable关键字
mutalbe的中文意思是“可变的,易变的”,跟constant(既C++中的const)是反义词。 在C++中,mutable也是为了突破const的限制而设置的。被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中。 我们知道,如果类的成员函数不会改变对象的状态,那么这个成员函数一般会声明成const的。但是,有些时候,我们需要在const的函数里面原创 2012-06-03 13:35:02 · 581 阅读 · 0 评论 -
C++中的RTTI介绍
作用 通过运行时类型识别(RTTI)(Run-Time Type Information),程序能够使用基类的指针或引用来检查这些指针或引用所指的对象的实际派生类型。RTTI介绍 RTTI提供了以下两个非常有用的操作符: (1)typeid操作符,返回指针和引用所指的实际类型; (2)dynamic_cast操作符,将基类类型的指针或引用安全地转换为派生类型转载 2012-04-05 19:24:20 · 511 阅读 · 0 评论 -
C常用库函数
1 字符处理函数所在函数库为ctype.h 函数原型 说明int isalpha(int ch) 判断ch是否是字母,若是字母返回非0值,否则返回0int isalnum(int ch) 判断ch是否是字母或数字,若是字母或数字返转载 2012-04-06 20:50:01 · 623 阅读 · 0 评论 -
C++中的locale设置
C/C++程序中,locale将决定程序所使用的当前语言编码、日期格式、数字格式及其它与区域有关的设置,locale设置的正确与否将影响到程序中字符串处理(wchar_t如何输出、strftime()的格式等)。因此,对于每一个程序,都应该慎重处理locale设置。C locale和C++ locale是独立的。C locale用setlocale(LC_CTYPE, “”)初始化,原创 2012-03-14 17:04:51 · 14769 阅读 · 0 评论 -
函数名与函数指针
一 通常的函数调用 一个通常的函数调用的例子://自行包含头文件void MyFun(int x); //此处的申明也可写成:void MyFun( int );int main(int argc, char* argv[]){ MyFun(10); //这里是调用MyFun(10);函数 return 0;}void MyFun原创 2012-04-02 11:21:50 · 516 阅读 · 0 评论 -
如何强制访问c++私有成员
前几天笔试adobe,出了这样一个题,当时只想到通过指针的偏移量来访问,但是由于对C++的类对象布局不是很有把握,就随便写了个答案,今天上百度搜了下,发现好几种方法,拿出来一起分享。 先看一个类 #include class A { private: char *str; public: A(): str("n转载 2012-04-03 14:16:20 · 996 阅读 · 0 评论 -
C++常识之——多态与重载
一.多态多态(Polymorphism)按字面的意思就是“多种形状”。引用Charlie Calverts对多态的描述——多态性是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作(摘自“Delphi4 编程技术内幕”)。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。多态性在Object Pa原创 2012-04-05 10:13:14 · 430 阅读 · 0 评论 -
C++深拷贝和浅拷贝区别
对于普通类型的对象来说,它们之间的复制是很简单的,例如:int a=88;int b=a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝的简单例子。 #include iostream> using namespace std; class CExample { private: int a;原创 2012-01-04 09:51:24 · 626 阅读 · 0 评论 -
友元函数重载
用友元函数重载“++”“--”时需要注意几点:1)运算符++、--都对单值操作数产生影响,因此使用成员运算符函数重载++和--的成员函数通常返回指针this。2)由于友元运算符函数没有this指针,因此不能引用this指针所指的对象,使用友元函数重载++、--时,应采用引用参数传递数据。3)采用前缀和后缀方式的函数内部的语句可以相同,也可以不同,这取决于用户的考虑。例子:原创 2012-04-05 10:22:18 · 1562 阅读 · 0 评论 -
多重继承的优缺点
多重继承的优点很明显:简单,清晰,更有利于复用。不会因为基类一个小小的改变而大张旗鼓去改代码。 缺点也很明显:首先,二义性。两个基类中有同名方法的时候,你不得不在子类的调用中指明此方法出自那个基类。这看起来有些麻烦,幸好在你迷糊的时候,编译器会提醒你。其次:假如类A派生了B和C,而B和C共同派生了D,麻烦就出现了。这种中间大两头小的继承树有个形象的名字:钻石型继承树(DOD:Diam转载 2012-04-05 17:04:30 · 826 阅读 · 0 评论 -
虚函数和纯虚函数的作用与区别
虚函数和纯虚函数的作用与区别虚函数为了重载和多态的需要,在基类中是由定义的,即便定义是空,所以子类中可以重写也可以不写基类中的函数!纯虚函数在基类中是没有定义的,必须在子类中加以实现,很像java中的接口函数!虚函数引入原因:为了方便使用多态特性,我们常常需要在基类中定义虚函数。class Cman{public:virtual void Eat(){……};void原创 2012-04-05 18:26:54 · 681 阅读 · 0 评论 -
c++继承方式及对基类的访问权限
公有继承,私有继承和保护继承三种。 继承方式基类属性 public protected private公有继承(public)publicprotected不可见保护继承原创 2012-04-05 15:55:26 · 2477 阅读 · 0 评论 -
C语言关键字 - auto和register
在我对C语言进行培训的时候,往往就是从C语言的关键字入手,因为C语言的关键字蕴含了C语言的全部的词汇,囊括了C语言里大量知识要点,从C语言关键字开刀,首先可以对你之前所学知识进行复习,其次,切磋一下和作者有什么不同的见解,废话少说,让我们从关键字开始。关键字,又叫保留字,是编译器能识别的特殊单词,每种计算机语言都会有其特定的关键字,C语言中有32位关键字。问:为什么要有关键字?转载 2012-04-05 21:04:54 · 802 阅读 · 0 评论 -
strcmp函数实现及分析
最近看C,看到strcmp函数,对它的实现原型不很清楚,于是到网上搜。网上算法一大堆,看了很多代码后自己做了一下总结 strcmp函数是C/C++中基本的函数,它对两个字符串进行比较,然后返回比较结果,函数形式如下:int strcmp(const char* str1, const char* str2);其中str1和str2可以是字符串常量或者字符串变量,返回值为整形。返回结转载 2012-06-04 13:55:10 · 1252 阅读 · 0 评论 -
彻底搞定C指针:指向指针的指针
一. 回顾指针概念:早在本系列第二篇中我就对指针的实质进行了阐述。今天我们又要学习一个叫做指向另一指针地址的指针。让我们先回顾一下指针的概念吧!当我们程序如下申明变量:short int i;char a;short int * pi;程序会在内存某地址空间上为各变量开辟空间,如下图所示。内存地址→6 7 8 9 10 11转载 2012-06-05 15:50:29 · 531 阅读 · 0 评论 -
C++ 值传递、指针传递、引用传递详解
最近写了几篇深层次讨论数组和指针的文章,其中提到了“C语言中,所有非数组的形式参数传递均以值传递形式”数组和指针背后——内存角度语义"陷阱"---数组和指针而关于值传递,指针传递,引用传递这几个方面还会存在误区, 所有我觉的有必要在这里也说明一下~下文会通过例子详细说明哦值传递:形参是实参的拷贝,改变形参的值并不会影响外部实参的值。从被调用函数的角度转载 2012-10-10 22:34:13 · 1325 阅读 · 0 评论 -
C语言列出某个目录下的文件
C语言本身没有提供象dir_list()这样的函数来列出某个目录下所有的文件。不过,利用C语言的几个目录函数,你可以自己编写一个dir_list()函数。 首先,头文件dos.h定义了一个find_t结构,它可以描述DOS下的文件信息,包括文件名、时间、日期、大小和属性。其次,C编译程序库中有_dos_findfirst()和_dos_findnext()这样两个函数,利用它们可以找到原创 2012-09-25 18:23:23 · 2023 阅读 · 0 评论 -
浅谈C语言递归机制和非递归转换
一、什么是递归很多数据结构的定义都是根据递归性质来进行定义的,是因为这些结构固有的性质。递归是指某个函数直接或间接的调用自身。问题的求解过程就是划分成许多相同性质的子问题的求解,而小问题的求解过程可以很容易的求出,这些子问题的解就构成里原问题的解了。二、递归的几个特点1.递归式,就是如何将原问题划分成子问题。2.递归出口,递归终止的条件,即最小子问题的求解,可以允许多个出口。原创 2012-10-19 10:49:06 · 1547 阅读 · 0 评论 -
C++ 类的成员初始化
一、我的问题是关于初始化C++类成员的。我见过许多这样的代码(包括在你的栏目中也见到过): CSomeClass::CSomeClass() { x=0; y=1; } 而在别的什么地方则写成下面的样子: CSomeClass::CSomeClass() : x(0), y(1) { } 我的一些程序员朋友说第二种方法原创 2012-10-21 16:58:52 · 1426 阅读 · 0 评论 -
详细解说 STL 排序(Sort)
0 前言: STL,为什么你必须掌握对于程序员来说,数据结构是必修的一门课。从查找到排序,从链表到二叉树,几乎所有的算法和原理都需要理解,理解不了也要死记硬背下来。幸运的是这些理论都已经比较成熟,算法也基本固定下来,不需要你再去花费心思去考虑其算法原理,也不用再去验证其准确性。不过,等你开始应用计算机语言来工作的时候,你会发现,面对不同的需求你需要一次又一次去用代码重复实现这些已经成熟的算转载 2012-10-30 13:53:54 · 1054 阅读 · 0 评论 -
Malloc与new的区别
1,malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。2,对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强原创 2012-10-26 09:34:49 · 1361 阅读 · 0 评论 -
C++运算符重载探讨
前言 多态性是面向对象程序设计的重要特征之一。它与前面讲过的封装性和继承性构成了面向对象程序设计的三大特征。这三大特征是相互关联的。封装性是基础,继承性是关键,多态性是补充,而多态又必须存在于继承的环境之中。 所谓多态性是指发出同样的消息被不同类型的对象接收时导致完全不同的行为。这里所说的消息主要是指对类的成员函数的调用,而不同的行为是指不同的实现。利用多态性,用户只需发送转载 2012-10-26 09:34:10 · 635 阅读 · 0 评论 -
c,c++里面,头文件里面的ifndef /define/endif的作用
今天和宿舍同学讨论一个小程序,发现有点地方不大懂······ 是关于头文件里面的一些地方:例如:要编写头文件test.h 在头文件开头写上两行: #ifndef _TEST_H #define _TEST_H//一般是文件名的大写 ············原创 2012-10-26 12:11:12 · 1970 阅读 · 0 评论 -
kmalloc vmalloc kzalloc malloc 和 get_free_page()
kmalloc vmalloc kzalloc get_free_page()是内核空间申请内存空间函数malloc是用户空间申请内存函数 一 ,kmalloc() 与 kfree() 和get_free_page的区别1,用于申请较小的、连续的物理内存:使用的是内存分配器slab一小片。申请的内存位于物理内存的映射区域。其正真的物理地址只相差一个固定的偏移。 可以用这两原创 2012-09-18 20:43:00 · 861 阅读 · 0 评论 -
怎样成为C 高手
1.把C 当成一门新的语言学习(和C没啥关系!真的。); 2.看《Thinking In C 》,不要看《C 变成死相》(C 编程思想,翻译的非常差); 3.看《The C Programming Language》(这本东西有影印板的)和《Inside The C Object Model》(http://www.youkuaiyun.com/exper......side-cpp-ob原创 2012-07-25 11:51:59 · 2459 阅读 · 0 评论 -
STL erase操作
STL中的容器都有erase方法,容器的存储分为顺序存储(如vector)与链式存储(如list,map)。先以map为例:typedef std::map TStrMap;typedef TStrMap::iterator TStrMapIter;TStrMap strmap;TStrMapIter iter = strmap.find("somekey");strmap.era原创 2012-06-07 14:30:37 · 608 阅读 · 0 评论 -
C/C++基本数据类型
学了C然后C++,然后MFC/Windows,然后是C#,其中数据类型很多,由基本类型衍生的typedef类型也N多。熟知基本数据类型是我们正确表达实际问题中各种数据的前提,因此我分类总结了一下C/C++/Windows /C#基本数据类型,以便日后查阅。 ANSIC/C++基本数据类型:TypeSize数值范围原创 2012-06-19 21:56:05 · 517 阅读 · 0 评论 -
dll的两种调用方式,lib与dll区别
(1)lib是编译时需要的,dll是运行时需要的。如果要完成源代码的编译,有lib就够了。如果也使动态连接的程序运行起来,有dll就够了。在开发和调试阶段,当然最好都有。(2)一般的动态库程序有lib文件和dll文件。lib文件是必须在编译期就连接到应用程序中的,而dll文件是运行期才会被调用的。如果有dll文件,那么对应的lib文件一般是一些索引信息,具体的实现在dll文件中。如原创 2012-07-05 10:47:14 · 2620 阅读 · 0 评论 -
虚析构函数和protected析构函数
一、虚析构函数类型需要虚析构函数的另外一个特征 是该类型具有指针成员或引用成员。如果有指针成员和引用成员,则该类型通常需要实现析构函数以及拷贝操作。 通常,一个实现了析构函数的类型同时也需要实现拷贝构造函数与拷贝复制函数。 作为一个经验法则:如果你有一个带有虚函数功能的类,则它需要一个虚析构函数,原因如下: 1. 如果一个类有虚函数功能,它经常作为一个基类使用。原创 2012-07-05 11:12:37 · 4584 阅读 · 1 评论 -
C++ 中函数后面跟const
问题:c++:void display( ) const 中的const是什么意思?简答:意思是除了表明了mutable的成员变量以外该类的其他的成员变量在这个函数内一律不能修改。详细:加const表明,该函数只能是只读的,不能修改私有变量的值。加强安全性。给隐含的this指针加const,表示这个this指向的东西是const的,也就是说这个函数中无法改动数据成员了。原创 2012-07-05 14:50:42 · 958 阅读 · 0 评论