导航

随笔分类 -  C/C++

摘要:原文:http://blog.pfan.cn/vfdff/33507.html个人总结在C语言的学习中,对内存管理这部分的知识掌握尤其重要!之前对C中的malloc()和free()两个函数的了解甚少,只知道大概该怎么用—— 就是malloc然后free就一切OK了。当然现在对这两个函数的体会也不见得多,不过对于本文章第三部分的内容倒是有了转折性的认识,所以写下这篇文章作为一个对知识的总结。这篇文章之所以命名中有个“浅谈”的字眼,也就是这个意思了!希望对大家有一点帮助! 如果不扯得太远的话(比如说操作系统中虚拟内存和物理内存如何运做如何管理之类的知识等),我感觉这篇文章应该是比较全面地谈了一下 阅读全文

posted @ 2012-05-01 15:46 网名还没想好 阅读(12537) 评论(5) 推荐(2) 编辑

摘要:1.closesocket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket:BOOL bReuseaddr=TRUE;setsockopt(s,SOL_SOCKET ,SO_REUSEADDR,(const char*)&bReuseaddr,sizeof(BOOL));2.如果要已经处于连接状态的soket在调用closesocket后强制关闭,不经历TIME_WAIT的过程:BOOL bDontLinger = FALSE;setsockopt(s,SOL_SOCKET,SO_DONTLINGER,(const char*)&bDontLinge 阅读全文

posted @ 2012-04-29 17:52 网名还没想好 阅读(473) 评论(0) 推荐(0) 编辑

摘要:1.closesocket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket:BOOL bReuseaddr=TRUE;setsockopt(s,SOL_SOCKET ,SO_REUSEADDR,(const char*)&bReuseaddr,sizeof(BOOL));2. 如果要已经处于连接状态的soket在调用closesocket后强制关闭,不经历TIME_WAIT的过程:BOOL bDontLinger = FALSE;setsockopt(s,SOL_SOCKET,SO_DONTLINGER,(const char*)&bDontLing 阅读全文

posted @ 2012-04-29 17:49 网名还没想好 阅读(1322) 评论(0) 推荐(0) 编辑

摘要:转自:http://blog.csdn.net/qianwenhao/article/details/2160014clearerr(清除文件流的错误旗标) 相关函数 feof表头文件 #include<stdio.h> 定义函数 void clearerr(FILE * stream); 函数说明 clearerr()清除参数stream指定的文件流所使用的错误旗标。 返回值 fclose(关闭文件) 相关函数 close,fflush,fopen,setbuf 表头文件 #include<stdio.h> 定义函数 int fclose(FILE * stream) 阅读全文

posted @ 2012-04-25 20:44 网名还没想好 阅读(470) 评论(0) 推荐(0) 编辑

摘要:1,linux下编译使用mysql c语言API编写的程序报错:gcc testmysql.cpp.c:(.text+0x11): undefined reference to `mysql_init'pp.c:(.text+0x55): undefined reference to `mysql_real_connect'pp.c:(.text+0x65): undefined reference to `mysql_error'pp.c:(.text+0x90): undefined reference to `mysql_close'collect2: l 阅读全文

posted @ 2012-04-19 17:10 网名还没想好 阅读(1653) 评论(0) 推荐(0) 编辑

摘要:在eclipse中,启动run on server时报错:Resource is out of sync with the file system: ........ 查阅资料后发现这是文件系统不同步的问题,是因为在eclipse之外对工程中的resource进行修改引起的;但是,有时没有在eclipse之外进行修改,也会报类似的错误。解决办法:需要手动刷新一下资源管理器。(1)在eclipse中,工程目录右键,选择F5(refresh)(2)设置eclipse自动刷新。 通过Window->Preferences --> General --> Workspace,选中Re 阅读全文

posted @ 2012-04-19 15:28 网名还没想好 阅读(241) 评论(0) 推荐(0) 编辑

摘要:为什么要了解虚函数表了解虚函数表对理解C++实现多态的机制会有更深的了解,对对象的内存布局会有更好的认识。如要转载请注明作者和本url验证虚函数表的存在(C++中的struct和class实际上是一样的)C++中当一个类中存在virtual函数(虚函数)或者它的父类中存在虚函数,那么编译器就会为这个类生成虚函数表(virtual table),下面我用代码来验证这个事情。首先写一个classclass A{};cout<<sizeof(A)<<endl;输出结果1,就是说这个类占1个字节(具体为什么要占1个字节我也不太清楚,应该就这么设计的吧,有高手请告诉我为什么)。下 阅读全文

posted @ 2012-04-16 11:47 网名还没想好 阅读(347) 评论(0) 推荐(0) 编辑

摘要:虚基类 在说明其作用前先看一段代码 class A { public: int iValue; }; class B:public A { public: void bPrintf(){cout<<"This is class B"<<endl;}; }; class C:public A { public: void cPrintf(){cout<<"This is class C"<<endl;}; }; class D:public B,public C { public: void dPrintf( 阅读全文

posted @ 2012-04-16 11:36 网名还没想好 阅读(265) 评论(0) 推荐(0) 编辑

摘要:const给人的第一印象就是定义常量。(1)const用于定义常量。 例如:const int N = 100;const int M = 200; 这样程序中只要用到 N、M 就分别代表为整型100、200,N、M 为一常量,在程序中不可改变。 但有人说他编程时从来不用const定义常量。我相信。但他是不懂得真正的编程艺术,用const定义常量不仅能方便我们编程而且能提高程序的清晰性。你是愿意看到程序中100、200 满天飞,还是愿意只看到简单清晰的N、M。相信有没有好处你慢慢体会。 还有人说他不用const定义常量,他用#define宏定义常量。可以。但不知道你有没有发现有时#define 阅读全文

posted @ 2012-04-16 11:23 网名还没想好 阅读(1135) 评论(0) 推荐(0) 编辑

摘要:对比于C 语言的函数,C++增加了重载(overloaded)、内联(inline)、const 和virtual四种新机制。其中重载和内联机制既可用于全局函数也可用于类的成员函数,const 与virtual 机制仅用于类的成员函数。1.重载(overloaded)重载的理由:1:在C++程序中,可以将语义、功能相似的几个函数用同一个名字表示,即函数重载。这样便于记忆,提高了函数的易用性2:类的构造函数需要重载机制。因为C++规定构造函数与类同名构,造函数只能有一个名字。如果想用几种不同的方法创建对象该怎么办?别无选择,只能用重载机制来实现。所以类可以有多个同名的构造函数。重载的实现:它们是 阅读全文

posted @ 2012-04-16 11:19 网名还没想好 阅读(365) 评论(0) 推荐(1) 编辑

摘要:多态性给我们带来了好处:多态使得我们可以通过基类的引用或指针来指明一个对象(包含其派生类的对象),当调用函数时可以自动判断调用的是哪个对象的函数。一个函数说明为虚函数,表明在继承的类中重载这个函数时,当调用这个函数时应当查看以确定调用哪个对象的这个函数。普通函数的处理:一个特定的函数都会映射到特定的代码,无论时编译阶段还是连接阶段,编译器都能计算出这个函数的地址,调用即可。虚函数的处理:被调用的函数不仅依据调用的特定函数,还依据调用的对象的种类。通常是由虚函数表(vtable)来实现的。虚函数表的结构:它是一个函数指针表,每一个表项都指向一个函数。任何一个包含至少一个虚函数的类都会有这样一张表 阅读全文

posted @ 2012-04-16 11:13 网名还没想好 阅读(903) 评论(0) 推荐(0) 编辑

摘要:作者:gzshun. 原创作品,转载请标明出处! 来源:http://blog.csdn.net/gzshun 在继承过程中,从基类派生出派生类,可能出现重名的成员,包括数据成员或成员函数,这些属于作用域方面的内容。 一、基类的引用或指针访问派生类 基类的引用或指针只能访问派生类中属于基类的部分成员,不能访问派生类的部分,否则就会编译出错。[cpp] view plaincopy#include<iostream>usingnamespacestd;classCBase{public:voidBasePrint()const{cout<<"调用基类的成员函数& 阅读全文

posted @ 2012-04-15 15:18 网名还没想好 阅读(301) 评论(0) 推荐(0) 编辑

摘要:相关函数: bcopy(), memccpy(), memmove(), strcpy(), strncpy() 表头文件: #include <string.h> 定义函数: void *memcpy(void *dest, const void *src, size_t n) 函数说明: memcpy()用来拷贝src所指的内存内容前n个字节到dest所指的内存地址上。与strcpy()不同的是,memcpy()会完整的复制n个字节,不会因为遇到字符串结束'\0'而结束 返回值: 返回指向dest的指针 附加说明: 指针src和dest所指的内存区域不可重叠 - 阅读全文

posted @ 2012-04-09 09:35 网名还没想好 阅读(456) 评论(0) 推荐(0) 编辑

摘要:表达式的计算分为两种,一种是有副作用的计算,如: (++x)+y 一种是无副作用的计算,如: x*y 有副作用的计算中,子表达式的计算顺序是重要的。例如 (++x)*(x+1) 当x=0时,如果先算++x,上式计算结果为2,如果先算x+1,上式计算结果为1。 再如,对函数g(int,int)的调用g(x,++x),当x=1,这个调用是g(1,2)还是g(2,2)? 所谓“顺序点”,和表达式的副作用紧密相关。再看这个例子: (++i)+(++j) 这个表达式的计算,有两个副作用: i自增1; j自增1; 但是到底哪一个先发生?答案是:任何答案都不对。 为什么... 阅读全文

posted @ 2012-04-08 22:21 网名还没想好 阅读(291) 评论(0) 推荐(0) 编辑

摘要:经过个人查阅相关的资料和理解,现对C语言的位域做一个总结,对于位域的定义我在这里没有多说,我这里主要是对位域有歧义的地方进行系统的总结.我个人觉得总结的比较完整,如有不够完整或有异义的地方大家可以留言指点.1.位域又叫位段(位字段),是一种特殊的结构成员或联合成员(即只能用在结构或联合中),用于指定该成员在内存存储时所占用的位数,从而可以在机内更紧凑地表示数据。2.位域的使用主要出现在如下两种情况:(1)当机器可用内存空间较少而使用位域可以大量节省内存时。如,当把结构作为大数组的元素时。(2)当需要把一结构或联合映射成某预定的组织结构时。例如,当需要访问字节内的特定位时。3. 当要把某个成员说 阅读全文

posted @ 2012-03-28 21:38 网名还没想好 阅读(1163) 评论(0) 推荐(0) 编辑

摘要:C++是一种复杂的编程语言,其中充满了各种微妙的陷阱。在 C++ 中几乎有数不清的方式能把事情搞砸。幸运的是,如今的编译器已经足够智能化了,能够检测出相当多的这类编程陷阱并通过编译错误或编译警告来通知程序员。最 终,如果处理得当的话,任何编译器能检查到的错误都不会是什么大问题,因为它们在编译时会被捕捉到,并在程序真正运行前得到解决。最坏的情况下,一个编译 器能够捕获到的错误只会造成程序员一些时间上的损失,因为他们会寻找解决编译错误的方法并修正。那些编译器无法捕获到的错误才是最危险的。这类错误不太容易察觉到,但可能会导致严重的后果,比如不正确的输出、数据被破坏以及程序崩溃。随着 项目的膨胀,代. 阅读全文

posted @ 2012-03-26 18:10 网名还没想好 阅读(398) 评论(0) 推荐(0) 编辑

摘要:指针是C/C++语言的特色,而数组名与指针有太多的相似,甚至很多时候,数组名可以作为指针使用。于是乎,很多程序设计者就被搞糊涂了。而许多的大学老师,他们在C语言的教学过程中也错误得给学生讲解:"数组名就是指针"。很幸运,我的大学老师就是其中之一。时至今日,我日复一日地进行着C/C++项目的开发,而身边还一直充满这样的程序员,他们保留着"数组名就是指针"的误解。 想必这种误解的根源在于国内某著名的C程序设计教程。如果这篇文章能够纠正许多中国程序员对数组名和指针的误解,笔者就不甚欣慰了。借此文,笔者站在无数对知识如饥似渴的中国程序员之中,深深寄希望于国内的计 阅读全文

posted @ 2012-03-05 10:25 网名还没想好 阅读(4145) 评论(3) 推荐(6) 编辑

摘要:如果一个变量你需要几种可能存在的值,那么就可以被定义成为枚举类型。之所以叫枚举就是说将变量或者叫对象可能存在的情况也可以说是可能的值一一例举出来。举个例子来说明一吧,为了让大家更明白一点,比如一个铅笔盒中有一支笔,但在没有打开之前你并不知道它是什么笔,可能是铅笔也可能是钢笔,这里有两种可能,那么你就可以定义一个枚举类型来表示它!enum box{pencil,pen};//这里你就定义了一个枚举类型的变量叫box,这个枚举变量内含有两个元素也称枚举元素在这里是pencil和pen,分别表示铅笔和钢笔。 这里要说一下,如果你想定义两个具有同样特性枚举类型的变量那么你可以用如下的两种方式进行定义. 阅读全文

posted @ 2012-02-24 12:29 网名还没想好 阅读(8127) 评论(0) 推荐(4) 编辑

摘要:#include<stdio.h>#include<stdlib.h>#include<string.h>int main(){char*p;char buf1[256];char buf2[256];char *c;int len=0;FILE*fp1,*fp2;fp1=fopen("z.txt","r");fp2=fopen("x.xml","w");while(fgets(buf1,256,fp1)!=NULL){if(buf1[0]=='#'){len=s 阅读全文

posted @ 2012-02-22 10:43 网名还没想好 阅读(278) 评论(0) 推荐(0) 编辑

摘要:sprintf函数功能:把格式化的数据写入某个字符串 头文件:stdio.h函数原型:int sprintf( char *buffer, const char *format [, argument] … ); 返回值:字符串长度(strlen)字串格式化命令,主要功能是把格式化的数据写入某个字符串中。sprintf 是个变参函数,使用时经常出问题,而且只要出问题通常就是能导致程序崩溃的内存访问错误,但好在由sprintf 误用导致的问题虽然严重,却很容易找出,无非就是那么几种情况,通常用眼睛再把出错的代码多看几眼就看出来了。fprintf C /C++中的一个格式化写—库函数;其作用... 阅读全文

posted @ 2012-02-21 20:40 网名还没想好 阅读(464) 评论(0) 推荐(0) 编辑