C/C++
liuchang0001
这个作者很懒,什么都没留下…
展开
-
C语言堆栈入门
C语言堆栈入门——堆和栈区别【转载】 在计算机领域,堆栈是一个不容忽视的概念,我们编写的C语言程序基本上都要用到。但对于很多的初学着来说,堆栈是一个很模糊的概念。堆栈:一种数据结构、一个在程序运行时用于存放的地方,这可能是很多初学者的认识,因为我曾经就是这么想的和汇编语言中的堆栈一词混为一谈。我身边的一些编程的朋友以及在网上看帖遇到的朋友中有好多也说不清堆栈,所以我想有必要给大家分...原创 2010-08-21 22:23:00 · 81 阅读 · 0 评论 -
KMP字符串匹配算法【Z】
最普通的字符串匹配算法就不记了,简单贴一下代码int strstr(char *sub, char* str){ int i=0; char *p=str, *q=sub; while(*(p+i)!='\0'&&*(...原创 2010-09-14 22:44:07 · 120 阅读 · 0 评论 -
C语言变量存储类型
C语言变量存储类型autostaticexternstatic externregisterauto 局部变量 auto 变量是用堆栈(stack)方式占用储存器空间,因此,当执行此区段是,系统会立即为这个变量分配存储器空间,而程序执行完后,这个堆栈立即被系统收回.在大括号{}内声明. 自动变量就是指在函数内部定义使用的变量。他只是允许在定义他的函...原创 2010-09-14 19:58:41 · 80 阅读 · 0 评论 -
C/C++中的void
1.void的含义 (1)void的字面意思是“无类型”,void*则为“无类型指针”,void*可以指向任何类型的数据。 (2)void几乎只有“注释”和限制程序的作用,因为从来没有人会定义一个void变量,让我们试着来定义: void a;(编译出错,提示“illegal use of type'void'”。) (3)任何类型的指针...原创 2010-09-14 19:54:05 · 197 阅读 · 0 评论 -
排序算法
1、稳定排序和非稳定排序简单地说就是所有相等的数经过某种排序方法后,仍能保持它们在排序之前的相对次序,我们就说这种排序方法是稳定的。反之,就是非稳定的。比如:一组数排序前是a1,a2,a3,a4,a5,其中a2=a4,经过某种排序后为a1,a2,a4,a3,a5,则我们说这种排序是稳定的,因为a2排序前在a4的前面,排序后它还是在a4的前面。假如变成a1,a4,a2,a3,a5...原创 2010-09-10 11:10:58 · 66 阅读 · 0 评论 -
C++ Socket连接实现【转载】
C++ socket程序下面是一个C++调用windows API实现有通信程序,您可以据此进行修改,封装成类.// *******************************************************************// client.cpp : Defines the entry point for the console applicat...原创 2010-08-31 21:27:50 · 166 阅读 · 0 评论 -
虚函数/纯虚函数
1.首先:强调一个概念 定义一个函数为虚函数,不代表函数为不被实现的函数。定义他为虚函数是为了允许用基类的指针来调用子类的这个函数。 定义一个函数为纯虚函数,才代表函数没有被实现。定义他是为了实现一个接口,起到一个规范的作用,规范继承这个。类的程序员必须实现这个函数。 2.关于实例化一个类: 有纯虚函数的类是不可能生成类对象的,如果没有纯虚函数则可...原创 2010-08-31 19:17:27 · 80 阅读 · 0 评论 -
纯虚函数
一、定义.纯虚函数是在基类中声明的虚函数,它在基类中没有定义,但要求任何派生类都要定义自己的实现方法。在基类中实现纯虚函数的方法是在函数原型后加“=0”virtual void funtion1()=0二、引入原因:1、为了方便使用多态特性,我们常常需要在基类中定义虚拟函数。2、在很多情况下,基类本身生成对象是不合情理的。例如,动物作为一个基类可以派生出老虎、孔...原创 2010-08-31 19:07:12 · 69 阅读 · 0 评论 -
C++ 对象的内存布局
转载-->C++ 对象的内存布局 陈皓http://blog.csdn.net/haoel前言 07年12月,我写了一篇《C++虚函数表解析》的文章,引起了大家的兴趣。有很多朋友对我的文章留了言,有鼓励我的,有批评我的,还有很多问问题的。我在这里一并对大家...原创 2010-08-31 16:38:29 · 66 阅读 · 0 评论 -
C/C++预处理、编译、链接过程【Z】
在Linux下进行C语言编程,必然要采用GNU GCC来编译C源代码生成可执行程序。一、GCC快速入门Gcc指令的一般格式为:Gcc [选项] 要编译的文件 [选项] [目标文件]其中,目标文件可缺省,Gcc默认生成可执行的文件名为:编译文件.out我们来看一下经典入门程序"Hello World!"# vi hello.c #include <stdlib.h&...原创 2011-01-05 14:07:39 · 249 阅读 · 0 评论 -
C#设计模式[链接]
http://zhenyulu.cnblogs.com/category/6930.html?Show=All原创 2011-01-05 14:19:33 · 73 阅读 · 0 评论 -
C++标准库【Z】
C++标准库的内容分为10类:C1.语言支持 C2.输入/输出 C3.诊断 C4.一般工具 C5.字符串C6.容器 C7.迭代器支持 C8.算法 C9.数值操作 C10.本地化C1 标准库中与语言支持功能相关的头文件 头文件 描述 <cstddef> 定义宏NULL和offsetof,以及其他标准类型size_t和ptrdiff_t。与对应的标准C头文件的区别...原创 2010-09-29 22:42:53 · 141 阅读 · 0 评论 -
c语言socket编程指南
介绍 Socket 编程让你沮丧吗?从man pages中很难得到有用的信息吗?你想跟上时代去编Internet相关的程序,但是为你在调用 connect() 前的bind() 的结构而不知所措?等等… 好在我已经将这些事完成了,我将和所有人共享我的知识了。如果你了解 C 语言并想穿过网络编程的沼泽,那么你来对地方了。 --------------------------...原创 2010-09-29 20:39:33 · 88 阅读 · 0 评论 -
kmp算法【Z】
我们这里说的KMP不是拿来放电影的(虽然我很喜欢这个软件),而是一种算法。KMP算法是拿来处理字符串匹配的。换句话说,给你两个字符串,你需要回答,B串是否是A串的子串(A串是否包含B串)。比如,字符串A="I'm matrix67",字符串B="matrix",我们就说B是A的子串。你可以委婉地问你的MM:“假如你要向你喜欢的人表白的话,我的名字是你的告白语中的子串吗?” ...原创 2010-09-24 19:02:41 · 100 阅读 · 0 评论 -
虚拟继承、虚函数学习总结【Z】
虚拟继承、虚函数学习总结 一、虚函数。其实是比较简单的,它的存在就是为了给子类继承,并且提供多个接口,所谓多个接口,就是多态性,它的主要特点就是父类的指针可以指向子类的对象,这样的话,在继承上会有好处。例如,某个父类有多个子类,在不知道会调用哪一个子类对象的情况下,可以定义一个父类的指针f,这样就实现了所谓的“接口”功能,在知道了要使用...原创 2010-09-24 16:03:40 · 75 阅读 · 0 评论 -
C++对象内存布局测试总结【Z】
对于普通的C++对象内存布局,简单得不得了,就不做总结了。这里只总结涉及到虚拟继承的情况。 因为不同编译器对虚拟继承的实现采用不同的方式,所以要完整的分析是不可能的。这里只考虑VS2005/2008,还有简单涉及GCC编译器。1、 单个虚拟继承只是为了分析而已,实际中并没有太大的作用。跟虚拟继承相关的派生类对象的内存布局跟具体的编译器相关。 (1)VS编译器:...原创 2010-09-24 16:02:23 · 116 阅读 · 0 评论 -
C++隐式成员函数2【Z】
1 编译器自动生成的基本函数C++编译器会在开发人员没有声明下列函数的时候,声明编译器自己的版本。class Empty{}等效于下面的声明class Empty{public:Empty(); //缺省构造函数Empty(const Empty& rhs); //拷贝构造函数~Empty(); //析构函数Empty & operator=(c...原创 2010-09-24 15:37:23 · 135 阅读 · 0 评论 -
C++隐式成员函数【Z】
这篇文章讲述的是C++提供的一些由编译器自动生成的函数,而这些函数,对你来说,也许是不可知的。在编程的世界中,没有比不可知更让人害怕了。C++自动提供了以下成员函数:1.默认构造函数:如果没有定义构造函数2.复制构造函数:如果没有定义3.赋值操作符:如果没有定义4.默认析构函数:如果没有定义...原创 2010-09-24 15:27:13 · 232 阅读 · 0 评论 -
extern详解【Z】
1 基本解释 extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。 另外,extern也可用来进行链接指定。2 问题:extern 变量 在一个源文件里定义了一个数组:char a[6]; 在另外一个文件里用下列语句进行了声明:extern char *a; ...原创 2010-09-24 14:44:29 · 105 阅读 · 0 评论 -
虚继承
虚拟继承在一般的应用中很少用到,所以也往往被忽视,这也主要是因为在C++中,多重继承是不推荐的,而一旦离开了多重继承,虚拟继承就完全失去了存在的必要(因为这样只会降低效率和占用更多的空间,实在是一无是处)。以下面的一个例子为例:[code="java"]#include #include class CA{ int k; //为了便于说明后面的内存结构特别添加...原创 2010-08-31 16:06:27 · 71 阅读 · 0 评论 -
C++ 抽象
在C++中,以类、虚函数等为代表的数据抽象功能一直是C++的核心和难点。我认为C++的抽象应该是指:从我们需要解决的问题出发,在与该问题相关的一组关联对象中提取出主要的或共有的部分――说简单一点,就是用相同的行为来操作不同的对象。从提出问题到找出与该问题相关的对象,这是一个互动的、反复的过程。在对相关对象的抽象中,随着认识的深入,我们可能会修改最初的目标,而最初目标的修改又可能使一组新的相...原创 2010-08-31 10:45:26 · 126 阅读 · 0 评论 -
C++头文件作用
C++标准库的所有头文件都没有扩展名。C++标准库的内容总共在50个标准头文件中定义,其中18个提供了C库的功能。 形式的标准头文件【 例外】其内容与ISO标准C包含的name.h头文件相同,但容纳了C++扩展的功能。在 形式标准的头文件中,与宏相关的名称在全局作用域中定义,其他名称在std命名空间中声明。在C++中还可以使用name.h 形式的标准C库头文件名。C++标准库的内容分为10...原创 2010-08-23 14:43:06 · 92 阅读 · 0 评论 -
C语言中的空指针、空指针常量、NULL & 0
1. 什么是空指针常量(null pointer constant)? [6.3.2.3-3] An integer constant expression with the value 0, or such an expression cast to type void *, is called a null pointer constant. 这里告诉...原创 2010-08-23 14:42:09 · 87 阅读 · 0 评论 -
C语言的常用类型转换函数(atoi,atol,strtod,strtol,strtoul)【转载】
atof(将字符串转换成浮点型数)相关函数 atoi,atol,strtod,strtol,strtoul表头文件 #include 定义函数 double atof(const char *nptr);函数说明 atof()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时...原创 2010-08-22 18:40:54 · 84 阅读 · 0 评论 -
typedef的四个用途和两个陷阱平【转载】
第一、四个用途用途一:定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如:char* pa, pb; // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针,// 和一个字符变量;以下则可行:typedef char* PCHAR; // 一般用大写PCHAR pa, pb; // 可行,同时声明了两个指向字符变量的指针...原创 2010-08-22 14:51:32 · 60 阅读 · 0 评论 -
内存对齐
内存对齐内存地址的对齐主要考虑三个因素: 1:对于每个成员的起始地址是他本身所占的整数倍 2:整个所占的内存是成员中占的地址内存最多的整数倍 3:有#pragma pack(int)进行设置,如果结构体某成员的sizeof大于你设置的,则按你的设置来对齐系统默认是#pragma pack(4)从计算结构变量字节大小的问题...原创 2010-08-22 10:50:25 · 126 阅读 · 0 评论 -
复杂C声明【转载】
复杂的C声明一般被认为不是很好的编程习惯,当然也就不推荐使用。但是在读很多前辈遗留的代码时,又不得不面对这一问题。知道总比不知道好,我们还是来看看分析复杂C语言声明的规则吧,用例子分析最直观。一、“right-left”规则看过《C专家编程》中的分析规则,用起来并不是很舒服,遂在网上寻找,发现还有一个著名的“right-left”规则。规则经翻译总结后如下:“right-lef...原创 2010-08-22 09:57:12 · 84 阅读 · 0 评论 -
C语言线程
线程相关操作 一 pthread_t pthread_t在头文件/usr/include/bits/pthreadtypes.h中定义: typedef unsigned long int pthread_t; 它是一个线程的标识符。 二 pthread_create 函数pthread_create用来创...原创 2010-08-21 23:19:55 · 159 阅读 · 0 评论 -
C语言malloc和free【转载】
在C语言的学习中,对内存管理这部分的知识掌握尤其重要!之前对C中的malloc()和free()两个函数的了解甚少,只知道大概该怎么用—— 就是malloc然后free就一切OK了。当然现在对这两个函数的体会也不见得多,不过对于本文章第三部分的内容倒是有了转折性的认识,所以写下这篇文章作为一个对知识的总结。这篇文章之所以命名中有个“浅谈”的字眼,也就是这个意思了!希望对大家有一点帮助!...原创 2010-08-21 22:46:39 · 65 阅读 · 0 评论 -
二叉树遍历及C语言实现
二叉树遍历及C语言实现已知中序和前序序列,或者已知中序和后序序列,都能够构造一棵二叉树。在本例中,本人用C语言写程序解答了下面两个算法题:(1)给出一棵二叉树的中序与后序遍历序列,求出它的先序遍历序列。(2)给出一棵二叉树的中序与先序遍历序列,求出它的后序遍历序列。知识点扼要回顾:所谓二叉树的遍历,是指按一定的顺序对二叉树中的每个结点均访问一次,且仅访问一。按照...原创 2010-08-23 17:02:15 · 180 阅读 · 0 评论 -
C语言文件操作函数大全
C语言文件操作函数大全clearerr(清除文件流的错误旗标)相关函数 feof表头文件 #include定义函数 void clearerr(FILE * stream);函数说明 clearerr()清除参数stream指定的文件流所使用的错误旗标。返回值 fclose(关闭文件)相关函数 close,fflush,fopen,setbuf表头文件 #i...原创 2010-08-23 18:51:09 · 58 阅读 · 0 评论 -
inline函数
介绍内联函数之前,有必要介绍一下预处理宏。内联函数的功能和预处理宏的功能相似。相信大家都用过预处理宏,我们会经常定义一些宏,如 #define TABLE_COMP(x) ((x)>0?(x):0) 就定义了一个宏。 为什么要使用宏呢?因为函数的调用必须要将程序执行的顺序转移到函数所存放在内存中的某个地址,将函数的程序内容执行完后,再返回到转去执行该函数前的地方。这种转...原创 2010-08-31 08:29:38 · 57 阅读 · 0 评论 -
C++ 模板
1. 什么是模板模板定义:模板就是实现代码重用机制的一种工具,它可以实现类型参数化,即把类型定义为参数,从而实现了真正的代码可重用性。我们知道,C++ 是一种“强类型”的语言,也就是说一个变量,编译器必须确切的知道它的类型,而模板就是构建在这个强类型语言基础上的泛型系统。2. 模板的语法模板函数template< typename {类型参数名称}, [ int {Name...原创 2010-08-30 22:30:00 · 59 阅读 · 0 评论 -
操作符重载
什么是操作符重载? 一看到重载,很容易就让人联想到成员函数重载,函数重载可以使名称相同的函数具有不同的实际功能,只要赋给这些同名函数不同的参数就可以了,操作符重载也是基于这一机制的。系统为我们提供了许多操作符,比如“+”,“[ ]”等,这些操作符都有一些默认的功能,而操作符重载机制允许我们给这些操作符赋予不同的功能,并能够按照普通操作符的使用格式来使用自己定义功能的操作符(即...原创 2010-08-30 15:14:40 · 63 阅读 · 0 评论 -
拷贝构造函数/复制构造函数
拷贝构造函数,经常被称作 X(X&),是一种特殊的构造函数,他由编译器调用来完成一些基于同一类的其他对象的构件及初始化。它的唯一的一个参数(对象的引用)是不可变的(因为是const型的)。这个函数经常用在函数调用期间于用户定义类型的值传递及返回。拷贝构造函数要调用基类的拷贝构造函数和成员函数。如果可以的话,它将用常量方式调用,另外,也可以用非常量方式调用。在C++中,下面三种对象需要拷贝的情况...原创 2010-08-29 21:24:19 · 257 阅读 · 0 评论 -
为什么static数据成员一定要在类外初始化?
为什么static数据成员一定要在类外初始化?1.避免重复定义和初始化说在类外定义和初始化是保证static成员变量只被定义一次的好方法。但,为什么static const int就可以在类里面初始化呢?想起C中一个函数里定义一个static变量是为了保证只初始化一次。那么,是否可以这样理解:static数据成员在类外定义和初始化是为了保证只被定义和初...原创 2010-08-29 20:28:52 · 192 阅读 · 0 评论 -
C++ Primer 393页隐式类类型详解
在C++ Primer的第393页提出了隐式类类型注解里面有一句话:“可以用单个参数来调用的构造函数定义了从形参类型到类类型的一个隐式转换。还是拿书上的例子来说事[code="java"]class Sales_item{public: Sales_item(const std::string &book=""): isbn(boo...2010-08-29 20:21:17 · 75 阅读 · 0 评论 -
C++ 静态成员
类中的静态成员真是个让人爱恨交加的特性。我曾经在面试时,被主考官抓住这个问题一阵穷追猛打,直把我问的面红耳赤,败下阵来。所以回来之后,我痛定思痛,决定好好总结一下静态类成员的知识点,以便自己在以后面试中,在此类问题上不在被动。静态类成员包括静态数据成员和静态函数成员两部分。一 静态数据成员:类体中的数据成员的声明前加上static关键字,该数据成员就成为了该类的静态数据成员。和...原创 2010-08-29 20:03:22 · 68 阅读 · 0 评论 -
隐式类类型转换
C++ primer 中有这么一句话:可以用单个实参来调用的构造函数定义了从形参类型到该类型的一个隐式转换。这么解释:比如有个类A的对象a的成员函数的参数应该是类A的对象,但是把一个别的类型B的对象b传进去了,而且这个对象b的类型恰好是A的单参数构造函数参数类型,这时系统就用这个b自作聪明的创建了一个类A的临时对象c,虽然c和a都是A类型,但是是不同的对象。这种隐式转换有很...原创 2010-08-29 16:31:43 · 116 阅读 · 0 评论 -
c语言输出重定向【Z】
可以使用重定向操作符将命令输入和输出数据流从默认位置重定向到不同的位置。输入或输出数据流的位置即为句柄。下表将列出可用的句柄。句柄 句柄的数字代号 描述 STDIN 0 键盘输入 STDOUT 1 输出到命令提示符窗口 STDERR 2 错误输出到命令提示符窗口 UNDEFINED 3-9 这些句柄由应用程序单独定义,并且是各个工具特定的。 数字 0 到 ...原创 2010-10-03 22:41:28 · 294 阅读 · 0 评论