
C++
jiahehao
发愤忘食,乐以忘忧。
展开
-
位运算符和位运算
一、“按位与”运算符(&) 1.运算规则 参加运算的两个数据,按二进位进行“与”运算,如果两个相应的二进位都为1,则该位的结果值为1,否则为0,即: 0&0=0,0&1=0,1&0=0,1&1=1. 2.用途 (1)清零 运算对象:原来的数中为1的位,新数中相应位为0。 (2)取一个原创 2007-10-22 19:27:00 · 929 阅读 · 0 评论 -
C/C++ 日期 时间 time_t与struct tm转换
本文从介绍基础概念入手,探讨了在C/C++中对日期和时间操作所用到的数据结构和函数,并对计时、时间的获取、时间的计算和显示格式等方面进行了阐述。本文还通过大量的实例向你展示了time.h头文件中声明的各种函数和数据结构的详细使用方法。关键字:UTC(世界标准时间),Calendar Time(日历时间),epoch(时间点),clock tick(时钟计时单元)1.概念在C/C++中,对字符串的操转载 2008-05-04 16:01:00 · 2400 阅读 · 0 评论 -
正则表达式基础知识
一个正则表达式就是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式。该模式描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。如: JScript VBScript 匹配转载 2008-05-07 13:55:00 · 568 阅读 · 0 评论 -
glib库hash表GHashTable介绍
hash表是一种提供key-value访问的数据结构,通过指定的key值可以快速的访问到与它相关联的value值。hash表的一种典型用法就是字典,通过单词的首字母能够快速的找到单词。关于hash表的详细介绍请查阅数据结构的相关书籍,我这里只介绍glib库中hash表的基本用法。要使用一个hash表首先必须创建它,glib库里有两个函数可以用于创建hash表,分别是g_hash_table转载 2008-07-02 10:28:00 · 1503 阅读 · 0 评论 -
C++中静态成员函数访问非静态成员变量
先看一个class class a...{public: static FunctionA() ...{ menber = 1; }private: int menber;}编译上述代码,出错。原因很简单大家都知道,静态成员函数不能访问非静态成员,这是因为静态函数属于类而不是属于整个对象,静态函数中的 member可能都没有分配内存。静态成员函数没有隐含的this自变量转载 2009-01-07 15:39:00 · 6739 阅读 · 2 评论 -
C/C++的堆栈,内存分配(转)
一、一个经过编译的C/C++的程序占用的内存分成以下几个部分:1、栈区(stack):由编译器自动分配和释放 ,存放函数的参数值、局部变量的值等,甚至函数的调用过程都是用栈来完成。其操作方式类似于数据结构中的栈。2、堆区(heap) :一般由程序员手动申请以及释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式类似于链表。3、全局区(静态区)(static)转载 2009-02-17 17:07:00 · 1959 阅读 · 0 评论 -
sprintf函数的用法
在将各种类型的数据构造成字符串时,sprintf 的强大功能很少会让你失望。由于sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出。这也导致sprintf 比printf 有用得多。sprintf 是个变参函数,定义如下:int sprintf( char *buffer, const char *format [, arg转载 2008-12-09 15:51:00 · 899 阅读 · 0 评论 -
C++之string详解
之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必 担心内存是否足够、字符串长度等等,而且作为一个类出现,他集成的操作函数足以完成我们大多数情况下(甚至是100%)的需要。我们可以用 = 进行赋值操作,== 进行比较,+ 做串联(是不是很简单?)。我们尽可以把它看成是C++的基本数据类型。 好了,进入正题……… 首先,为了在我们的程序中使用s原创 2008-12-26 16:03:00 · 820 阅读 · 0 评论 -
memset,memcpy,strcpy 的区别及C字符串函数
一.函数原型 strcpy extern char *strcpy(char *dest,char *src); #include 功能:把src所指由NULL结束的字符串复制到dest所指的数组中 说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。 返回指向dest的指针memcpyextern void *memcpy转载 2009-07-08 16:41:00 · 1868 阅读 · 0 评论 -
CString,int,string,char*之间的转换
《C++标准函数库》中说的有三个函数可以将字符串的内容转换为字符数组和C—string 1.data(),返回没有”/0“的字符串数组 2,c_str(),返回有”/0“的字符串数组 3,copy() .................................................................int 转 CString:CString.Format("%转载 2009-09-18 13:54:00 · 701 阅读 · 0 评论 -
c语言中的结构(struct)和联合(union)简介
<br /> 联 合(union) <br /> 1. 联合说明和联合变量定义 <br /> 联合也是一种新的数据类型, 它是一种特殊形式的变量。 <br /> 联合说明和联合变量定义与结构十分相似。其形式为: <br /> union 联合名{ <br /> 数据类型 成员名; <br /> 数据类型 成员名; <br /> ... <br /> } 联合变转载 2010-09-01 15:06:00 · 905 阅读 · 0 评论 -
指向指针的指针
<br />采用指向指针的指针操作,一般用于在函数内部来改变采用指针方式传进函数的主函数的指什的指向.<br /> <br />这是我的一个认识盲区,以前我觉得只要传进的是指针,就能够改变值,现在看来,是有所区别的.指针所指的值可以被改变,但指针本身的值是不会被改变的.实际上,函数调用时会对每一个参数进行一个隐含的赋值操作。<br /> <br />我们想在函数pro()中改变指针p的值(记住:是指针p的值,而不是p所指向的地址的值)。能实现吗?结果是不能,为什么?我们来分析一下 <br /><br />先转载 2010-12-08 16:57:00 · 770 阅读 · 0 评论 -
C语言中有关string的函数详解
<br />@函数名称: strdup <br />函数原型: char *strdup(const char *s) <br />函数功能: 字符串拷贝,目的空间由该函数分配 <br />函数返回: 指向拷贝后的字符串指针 <br />参数说明: src-待拷贝的源字符串 <br />所属文件: <string.h> <br />#include <stdio.h> <br />#include <string.h> <br />#include <alloc.h> <br />转载 2010-11-15 16:41:00 · 708 阅读 · 0 评论 -
细说 #pragma pack(n)
在C语言中,结构是一种复合数据类型,其构成元素既可以是基本数据类型(如int、long、float等)的变量,也可以是一些复合数据类型(如数组、结构、联合等)的数据单元。在结构中,编译器为结构的每个成员按其自然对界(alignment)条件分配空间。各个成员按照它们被声明的顺序在内存中顺序存储,第一个成员的地址和整个结构的地址相同。例如,下面的结构各成员空间分配情况:struct test { char x1; short x2; float x3; char x4;};结构转载 2010-11-24 11:14:00 · 438 阅读 · 0 评论 -
C/C++ extern的用法实例
用例子给你示范 // 1.cpp int x = 10; // 2.cpp 注意没有包含1.cpp #include using namespace std; extern int x;int main () { cout //则输出10 两个文件同在一个项目(project)中,你不包含某个文件(cpp)而可以用它内部定义的变量,(里是.pp不是.h, 因为在.h中定义的数据不能在.cpp中用除非这个.cpp包含这个.h文件) 例: // 1.h #include void print() { std::转载 2011-02-20 22:40:00 · 2226 阅读 · 0 评论 -
inline函数
<br />一)inline函数(摘自C++ Primer的第三版)<br /> 在函数声明或定义中函数返回类型前加上关键字inline即把min()指定为内联。<br /> inline int min(int first, int secend) {/****/};<br /> inline函数对编译器而言必须是可见的,以便它能够在调用点内展开该函数。与非inline函数不同的是,inline函数必须在调用该函数的每个文本文件中定义。当然,对于同一程序的不同文件,如果inl转载 2011-03-22 19:49:00 · 1005 阅读 · 0 评论 -
大端模式和小端模式
大端格式:在这种格式中,字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中,如图2.1所示:小端格式:与大端存储格式相反,在小端存储格式中,低地址中存放的是字数据的低字节,高地址存放的是字数据的高字节。如图2.2所示: 请写一个C函数,若处理器是Big_endian的,则返回0;若是Little_endian的,则返回1解答: int check转载 2012-03-30 10:29:39 · 1066 阅读 · 1 评论 -
ostringstream函数的使用
当存在未知数据大小的时候,可以使用 ostringstream 来代替 sprintf , 避免总是申请大量的缓冲区.用法可以参照下面转载的文章.另外解决今天遇到的一个问题,如果要重复使用一个ostringstream对象,并且需要在下次使用前清空缓冲区,则可以使用str()函数重设置缓冲区. 如:ostringstream osSql;//first timeosSql...clsCo转载 2008-04-04 16:56:00 · 16278 阅读 · 1 评论 -
sprintf详解
在将各种类型的数据构造成字符串时,sprintf 的强大功能很少会让你失望。由于sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出。这也导致sprintf 比printf 有用得多。sprintf 是个变参函数,定义如下:int sprintf( char *buffer, const char *format [, arg原创 2007-12-26 17:05:00 · 673 阅读 · 0 评论 -
C++语言中的内联函数(inline)
在c++中,为了解决一些频繁调用的小涵数大量消耗栈空间或者是叫栈内存的问题,特别的引入了inline修饰符,表示为内联涵数。 可能说到这里,很多人还不明白什么是栈空间,其实栈空间就是指放置程序的局部数据也就是函数内数据的内存空间,在系统下,栈空间是有限的,如果频繁大量的使用就会造成因栈空间不足所造成的程序出错的问题,涵数的死循环递归调用的最终结果就是导致栈内存空间枯竭。 下面我们来看一个例转载 2008-02-19 16:59:00 · 844 阅读 · 0 评论 -
如何理解C run-time library
1)运行时库就是 C run-time library,是 C 而非 C++ 语言世界的概念:取这个名字就是因为你的 C 程序运行 时需要这些库中的函数. 2)C 语言是所谓的“小内核”语言,就其语言本身原创 2007-10-21 14:33:00 · 658 阅读 · 0 评论 -
C编程时可能会引起溢出的相关函数
Gets 最危险 使用 fgets(buf, size, stdin)。对gets函数的使用几乎总会造成问题Strcpy 很危险 建议改为使用 strncpy函数Strcat 很危险 建议改为使用 strncat函数 Sprintf 很危险 建议改为snprintf函数,或使用精度说明符Scanf 很危险 使用精度说明符,或自己进行解析原创 2007-10-22 19:40:00 · 848 阅读 · 0 评论 -
C++中接口与实现分离的技术
在用C++写要导出类的库时,我们经常只想暴露接口,而隐藏类的实现细节。也就是说我们提供的头文件里只提供要暴露的公共成员函数的声明,类的其他所有信息都不会在这个头文件里面显示出来。这个时候就要用到接口与实现分离的技术。 下面用一个最简单的例子来说明。 类ClxExp是我们要导出的类,其中有一个私有成员变量是ClxTest类的对象,各个文件内容如下:转载 2007-10-23 09:23:00 · 599 阅读 · 0 评论 -
strings(字符串)详解
之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必担心内存是否足够、字符串长度等等,而且作为一个类出现,他集成的操作函数足以完成我们大多数情况下(甚至是100%)的需要。我们可以用 = 进行赋值操作,== 进行比较,+ 做串联(是不是很简单?)。我们尽可以把它看成是C++的基本数据类型。原创 2007-10-22 19:30:00 · 1277 阅读 · 0 评论 -
c/c++ 学习-open 函数
open 函数用于打开和创建文件。以下是 open 函数 的简单描述: #include fcntl.h> int open(const char *pathname, int oflag, ... /原创 2007-10-24 14:45:00 · 22710 阅读 · 2 评论 -
调试中解决问题的经历
1、文件在windows下编译,运行都正常,但是在linux下就出编译错误,说一个宏没定义,还有open,close等几个操作文件的函数不认识。初步判断是宏设置编译选项的问题。于是先查open函数,发现在windows下是需要#include fcntl.h> 这一句的。然后在全项目范围内找fcntl.h文件,发现在文件中是这样定义的: #ifdef HAVE_原创 2007-10-24 15:34:00 · 1109 阅读 · 0 评论 -
C++中如何识别汉字
本文是菜鸟科普文章,高手接分在处理套打程序时用到TextOut,但TextOut无法自动换行,只好动手写代码,可是处理到汉字部分时卡住了,搜索网上判断汉字的帖子,都语焉不详,经过一下午的研究,终于整理出一个简单的教程。 其实判断汉字的代码很简单,简单到只有一行就可以了, 但不理解原创 2007-10-24 20:13:00 · 14170 阅读 · 1 评论 -
内存管理的几种方法
传统的内存整理软件工作原理大概是:先申请一块“巨大内存”。因为物理内存几乎全被内存整理软件占用,因此Windows被迫把其他软件的内存数据转移到硬盘上的“虚拟内存交换文件”(PageFile)中,完成这一过程之后内存整理软件就会释放掉刚刚申请的内存,至此整理过程完成,可用物理内存显著增加。 大体上都是那么回转载 2007-10-24 20:17:00 · 9570 阅读 · 0 评论 -
理解C run-time library (C运行时库)
1)运行时库就是 C run-time library,是 C 而非 C++ 语言世界的概念:取这个名字就是因为你的 C 程序运行时需要这些库中的函数. 2)C 语言是所谓的“小内核”语言,就其语言本身来说很小(不多的关键字, 程序流程控制,数据类型等);所以,C 语言内核开发出转载 2007-10-26 15:12:00 · 1222 阅读 · 0 评论 -
微软C/C++/C#编译器命令行模式设定和用法
和在IDE中编译相比,命令行模式编译速度更快,并可以避免被IDE产生的一些附加信息所干扰。本文将介绍微软C/C++/C#编译器命令行模式设定和用法。操作系统为Windows 2000。 一.微软C/C++编译器命令行模式设定 方法一 1. 参照如下内容(根据你的系统情况,作出相应修改),编写一个批处理文件,假定命名为vs.bat。 @echo off set PATH=C:原创 2007-10-26 15:18:00 · 1666 阅读 · 0 评论 -
用C++实现文件I/O操作
文件 I/O 在C++中比烤蛋糕简单多了。 在这篇文章里,我会详细解释ASCII和二进制文件的输入输出的每个细节,值得注意的是,所有这些都是用C++完成的。 一、ASCII 输出 为了使用下面的方法, 你必须包含头文件(译者注:在标准C++中,已经使用取代,所有的C++标准头文件都是无后缀的。)。这是 的一个扩展集, 提供有缓冲的文件输入输出操作. 事实上, 已经被包含了, 所以你不原创 2007-11-01 15:51:00 · 2151 阅读 · 0 评论 -
C/C++中的日期和时间
摘要:本文从介绍基础概念入手,探讨了在C/C++中对日期和时间操作所用到的数据结构和函数,并对计时、时间的获取、时间的计算和显示格式等方面进行了阐述。本文还通过大量的实例向你展示了time.h头文件中声明的各种函数和数据结构的详细使用方法。 关键字:UTC(世界标准时间),Calendar Time(日历时间原创 2007-10-30 15:06:00 · 685 阅读 · 0 评论 -
C++的File类文件操作
语言文件系统称为流文件(Stream),正文流(正文文件),二进制流(二进制文件) 缓冲与非缓冲文件 顺序操作文件与随机操作文件 顺序文件:读/写第K个数据块之前必须读/写第1至K-1个数据块; 随机文件:可直接读/写第K个数据块; 正文文件的操作一般是顺序文件; 二进制文件的操作都是随机文件。 一、文原创 2007-11-02 11:16:00 · 41520 阅读 · 2 评论 -
C基于流fstream的文件操作
基于C的文件操作 在ANSI C中,对文件的操作分为两种方式,即流式文件操作和I/O文件操作,下面就分别介绍之。 一、流式文件操作 这种方式的文件操作有一个重要的结构FILE,FILE在stdio.h中定义如下: typedef struct { int level; /* fill/empty level of buffer转载 2007-11-02 11:20:00 · 3330 阅读 · 0 评论 -
CString和char*的相互转换
首先声明我不是一个高手,而是一个初学者,文章同样也是一个初学者对于CString和char*转换的理解。 因为需要,接触C++一段时间了,其中最为困扰我的问题就是在使用C++的过程中CString和char*的转换,在网上搜索了一下,看到问这个问题的人挺多的。我使用的平台是Win2003+VC 2005,本来这个很简单的问题稍微复杂了一点在2005里面。 在我的工程里面要集成一个转载 2007-11-12 17:31:00 · 1937 阅读 · 0 评论 -
c++中的explicit关键字
c++中的explicit关键字用来修饰类的构造函数,表明该构造函数是显式的,既然有"显式"那么必然就有"隐式",那么什么是显示而什么又是隐式的呢?如果c++类的构造函数有一个参数,那么在编译的时候就会有一个缺省的转换操作:将该构造函数对应数据类型的数据转换为该类对象,如下面所示:class MyClass{public:MyClass( int num );}....MyClass原创 2008-02-13 10:38:00 · 634 阅读 · 0 评论